X11
Xwindows drives the underlying graphical interface of most if not all Unix/Linux computers providing a GUI. It was developed in 1984 at MIT. After around 35 years of development, tweaking and adding of new hardware and ideas, it is generally acknowledged to be a bit of a beast. It should be remembered that the common configuration at time of development was a single mini running X providing individual views to Xterminals in a timesharing system. Nowadays the norm is X providing a single screen on a desktop or laptop.
All of this means that there are many ways of achieving the same thing and many slightly different things that can meet the same purpose. In modern X versions sometimes you can get away with limited or no configuration. In the last few years the boast is that X is self configuring. Certainly the best practice rule of thumb is less configuration is better - that is only configure what is wrong.
Xorg
- X.Org project provides an open source implementation of the X Window System. The development work is being done in conjunction with the freedesktop.org community. The X.Org Foundation is the educational non-profit corporation whose Board serves this effort, and whose Members lead this work.
X11: /usr/lib/X11 /etc/X11 /usr/include/X11 /usr/share/X11
- http://en.wikipedia.org/wiki/X_Window_System_core_protocol
- http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture
- http://en.wikipedia.org/wiki/X_Window_selection
- A Testament to X11 Backwards Compatibility - I recently scored a Hewlett Packard 1670A Deep Memory Logic Analyzer and I finally had a chance to fire it up. This unit dates back to 1992 and is packed with all sorts of interesting options for connecting peripherals to it. One particular feature that caught my eye was the option to connect to an X Server.
History
Legacy X servers
- https://en.wikipedia.org/wiki/X386 - the first implementation of the X Window System for IBM PC compatible computers.
- https://en.wikipedia.org/wiki/XFree86 - was an implementation of the X Window System. For most of the 1990s and early 2000s, the project was the source of most innovation in X and was the de facto steward of X development. Until early 2004, it was almost universal on Linux and the BSDs. In February 2004, with version 4.4.0, The XFree86 Project adopted a license change that the Free Software Foundation considered GPL incompatible. Most open source operating systems using XFree86 found this unacceptable and moved to a fork from before the license change. The first fork was the abortive Xouvert, but X.Org Server soon became dominant. Most XFree86 developers also moved to X.Org.
Startup
/etc/X11/xinit/xinitrc
if [ -d /etc/X11/xinit/xinitrc.d ]; then for f in /etc/X11/xinit/xinitrc.d/*; do [ -x "$f" ] && . "$f" done unset f fi
- https://github.com/XDesk/xtoolwait - Allows to start X applications serially
Config
You can create a basic xorg.conf using the X executable itself. As root run:
Xorg :1 -configure
This will create the file /root/xorg.conf.new, which you can then copy to /etc/X11/xorg.conf:
cp /root/xorg.conf.new /etc/X11/xorg.conf
xrdb
xset
In case monitors don't report EDID information, modeline settings might required.
cvt 1280 1024 75
- xvidtune − video mode tuner for Xorg
randr
- http://en.wikipedia.org/wiki/RandR - a communications protocol written as an extension to the X11[2] protocol. XRandR provides the ability to resize, rotate and reflect the root window of a screen. RandR is also responsible for setting the screen refresh rate.
xrandr -q show possible and current screen resolutions
xdpyinfo | grep 'dimensions:' show just current screen resolution in px and mm
xrandrr='xrandr --output DVI-I-1 --mode 1280x1024 --pos 0x0 --panning 0x0+0+0 --output DVI-I-0 --mode 1280x1024 --pos 1280x0' xrandrc='xrandr --output DVI-I-1 --same-as DVI-I-0' xrandr --output DVI-I-1 --off xrandr --output TV-0 --mode 1024x768 --pos 0x0 --panning 0x0+0+0 --output DVI-I-0 --mode 1280x1024 --pos 1024x0
- ARandR is designed to provide a simple visual front end for XRandR. Relative monitor positions are shown graphically and can be changed in a drag-and-drop way.
- autorandr - Auto-detect the connect display hardware and load the appropiate X11 setup using xrandr or disper
- randrctl - Minimalistic JSON profile based screen manager for X. It allows to store current screen setup in a declarative configuration file (a profile) and apply stored settigns later with a simple command.
Multihead
- http://en.wikipedia.org/wiki/Xinerama - old now
- http://sourceforge.net/projects/xinerama/
- http://tldp.org/HOWTO/Xinerama-HOWTO/intro.html
- YouTube: The Rebirth of Xinerama
faulty EDID;
- https://bbs.archlinux.org/viewtopic.php?id=135656
- https://forums.gentoo.org/viewtopic-t-904672-start-0.html
- DMX (Distributed Multihead X Project) - Typical X servers provide multi-head support for multiple displays attached to the same machine. When Xinerama is in use, these multiple displays are presented to the user as a single unified screen. Xdmx is proxy X server that provides multi-head support for multiple displays attached to different machines (each of which is running a typical X server). When Xinerama is used with Xdmx, the multiple displays on multiple machines are presented to the user as a single unified screen. A simple application for Xdmx would be to provide multi-head support using two desktop machines, each of which has a single display device attached to it.
Switching
- Disper is an on-the-fly display switch utility. It is intended to be used just before giving a presentation with a laptop, when all one wants is that the beamer, which has just been connected, is able to show whatever you prepared. Disper gives you the option to either clone all detected displays, or extend the desktop to them. Resolutions are automatically detected. For cloning, the highest common resolution supported by all displays is chosen; for extending every display device gets its highest supported resolution. For special setups requiring more detailed control, one can still use the standard display configuration utilites.
- https://github.com/Ventto/mons - POSIX Shell script to quickly manage three monitors on X
- https://github.com/substack/xit - configure an external display on linux. JavaScript.
- https://github.com/emersion/kanshi - Dynamic display configuration
- https://github.com/philipflohr/SwayMonMan - An easy-to-use manager for complex monitor setups in changing environments using swaywm
Remote
X's network transparency was not designed as 'it will run xterm well'; originally it was to be something that should let you run almost everything remotely, providing a full environment. ... You cannot operate with X over the network in the same way that you do locally. Trying to do so is painful and involves many things that either don't work at all or perform so badly that you don't want to use them.
X Forwarding
Requires xorg-xauth and xorg-xhost packages on the remote machine.
Remote /etc/ssh/sshd_config:
AllowTcpForwarding yes X11UseLocalhost yes X11DisplayOffset 10 X11Forwarding yes
Remote /etc/ssh/ssh_config:
Compression yes
Local /etc/ssh/ssh_config (optional, flag is -X)
ForwardX11 yes
ssh -XC user@host # X forwarding, compression xclock # remote xclock should appear locally xhost +192.168.1.64 # add address to x access control list
mcookie # generate magic cookie on remote, i.e., bc85bb773ae8897d9569ddbe69684411
xauth add node10/unix:3 . bc85bb773ae8897d9569ddbe69684411 # add remote to local xauth list xauth list # list X magic cookies
- https://wiki.archlinux.org/index.php/Xhost - used to add and delete host names or user names to the list allowed to make connections to the X server. In the case of hosts, this provides a rudimentary form of privacy control and security. It is only sufficient for a workstation (single user) environment, although it does limit the worst abuses.
Xnest
- Xnest is both an X client and an X server. Xnest is a client of the real server which manages windows and graphics requests on its behalf. Xnest is a server to its own clients. Xnest manages windows and graphics requests on their behalf. To these clients, Xnest appears to be a conventional server.
- http://en.wikipedia.org/wiki/Xnest - a display server implementing the X11 display server protocol that shows its output in a window. In other words, Xnest opens a window that works like another screen in which the user can open windows, etc.
Xephyr
- Xephyr is a kdrive based X Server which targets a window on a host X Server as its framebuffer. Unlike Xnest it supports modern X extensions (even if host server doesn't) such as Composite, Damage, randr etc (no GLX support now). It uses SHM Images and shadow framebuffer updates to provide good performance. It also has a visual debugging mode for observing screen updates.
Xephyr -br -ac -noreset -screen 800x600 :1 & DISPLAY=:1 xterm
startx -- /usr/bin/Xephyr :1
Xpra
- Xpra - X Persistent Remote Applications, is 'screen for X', and more: it allows you to run X programs, usually on a remote host and direct their display to your local machine. It also allows you to display existing desktop sessions remotely. Xpra is "rootless" or "seamless", and sessions can be accessed over SSH, or password protected and encrypted over plain TCP sockets. Xpra adapts to bandwidth constraints and is fully open-source. [7]
The main problem with ssh -X is all your apps close when your connection drops.
xpra shadow ssh:milk@silver.local:0 --ssh="/usr/bin/ssh p=231" # shadow the display on a remote machine
- Xdummy was originally developed by Karl Runge as a script to allow a standard X11 server to be used by non-root users with the dummy video driver
x2x
- x2x allows the keyboard, mouse on one X display to be used to control another X display.
x2vnc
- x2vnc - A dual-screen hack. will let you use two screens on two different computers as if they were connected to the same computer. Even if one of the computers runs Windows 95/98/NT and the other one runs X-windows. The program will open a small (one pixel wide) window on the edge of your screen. Moving the pointer into this window will trigger the program to take over your mouse and send mouse movements and keystrokes though the RFB protocol to a VNC server running on another machine. When the pointer is moved back towards the opposite edge on the other screen, the mouse is then released again. The operation itself is almost identical to x2x, but most of the code was actually borrowed from the program vncviewer.
x11vnc
- x11vnc allows one to view remotely and interact with real X displays (i.e. a display corresponding to a physical monitor, keyboard, and mouse) with any VNC viewer. In this way it plays the role for Unix/X11 that WinVNC plays for Windows.
xrdp
- xrdp - An open source remote desktop protocol(rdp) server. Based on the work of FreeRDP and rdesktop, xrdp uses the remote desktop protocol to present a GUI to the user. The goal of this project is to provide a fully functional Linux terminal server, capable of accepting connections from rdesktop, freerdp, and Microsoft's own terminal server / remote desktop clients. Unlike Windows NT/2000/2003/2008/2012 server, xrdp will not display a Windows desktop but an X window desktop to the user. Xrdp uses Xvnc or X11rdp to manage the X session.
xmove
- xmove - a computer program that allows the movement of X Window System applications between different displays and the persistence of X applications across X server restarts. It solves a problem in the design of X, where an X client (an X application) is tied to the X server (X display) it was started on for its lifetime. Also, if the X server is shut down, the client application is forced to stop running. xmove lets the client disconnect from its current X server, and connect to a new one, at any time. The transition is completely transparent to the client. xmove works by acting as a proxy between the client and server. It is a "pseudoserver" which stores enough server state so that clients can connect to a new server without being disrupted.
Guievict
- guievict is a computer program which enables the GUI of any application for XFree86 implementation of X Window to be transparently migrated to or replicated on another display. Unlike some program providing similar functionalities, it requires neither prearranging steps such as re-linking the application program binary nor re-directing the application process's window system communication through a proxy like xmove does.
DXPC
- dxpc - The Differential X Protocol Compressor, designed to improve the speed of X11 applications run over low-bandwidth links (such as dialup PPP connections).