From Things and Stuff Wiki
Jump to navigation Jump to search


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.


  • 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

  • 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.


Legacy X servers

  • 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.


  • https://en.wikipedia.org/wiki/MIT-SHM - a X Window System extension for exchange of image data between client and server using shared memory. The basic capability provided is that of shared memory XImages. This is essentially a version of the ximage interface where the actual image data is stored in a SysV shared memory segment, and thus need not be transferred across the socket to the X server. For large images, use of this facility can result in some real performance increases.

  • transset-df - This is a patched version of xorg's transsetI wanted to integrate transset into my windowmanager and tobe able to set and unset transparency by just pressing a key.


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


In case monitors don't report EDID information, modeline settings might required.

cvt 1280 1024 75


if [ -d /etc/X11/xinit/xinitrc.d ]; then
       for f in /etc/X11/xinit/xinitrc.d/*; do
               [ -x "$f" ] && . "$f"
       unset f


  • 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


  • https://github.com/eBrnd/randrpresets - Instantly create and apply presets for your xrandr monitor setup. Especially useful for laptop users who routinely connect external monitors or projectors to their machine.


  • https://github.com/edio/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.



  • 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.



  • https://sourceforge.net/projects/zarfy - A gui to libxrandr. It presents the user with visual representaion of active displays on an interactive map of the screen memory. Features free postioning, configuration saving, scripting for R&R and an alternate gui for switching between monitors.




  • https://github.com/fd0/grobi - watches for changes in the available outputs (e.g. when a monitor is connected/disconnected, and will automatically configure the currently used outputs via RANDR according to configurable profiles.

DPI is calculated based on the first or primary output's EDID information and rounded to the nearest 12. Laptop outputs are turned off when the lid is closed.


faulty EDID;

  • 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.


  • 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.


X11 tools





  • xprop - property displayer for X
xprop -root
  # list root (wm) window properties

  # set _NET_DESKTOP_GEOMETRY. only applies if wm supported.


  • xev - print contents of X events
    • 'keysym' gives the name to bind to


  • xwit is an X window interface tool. By default when used with no arguments in an xterm it de-iconifies and raises the window. You can specify a different function to do, such as iconifying the window, and apply it to several windows whose name begins with one of the given strings, or a particular window id given, or the window id found in the environment variable WINDOWID (which is set by xterm for the program it runs), or the window under the mouse cursor.


  • xdotool - lets you simulate keyboard input and mouse activity, move and resize windows, etc. It does this using X11's XTEST extension and other Xlib functions. Additionally, you can search for windows and move, resize, hide, and modify window properties like the title. If your window manager supports it, you can use xdotool to switch desktops, move windows between desktops, and change the number of desktops.



  • wmctrl is a UNIX/Linux command line tool to interact with an EWMH/NetWM compatible X Window Manager.



  • chwb - change window's border
  • chwso - change window's stacking order
  • ignw - ignore/unignore window
  • killw - kill windows
  • lsw - list windows
  • mapw - map/unmap windows
  • pfw - print focused window
  • wattr - show window's attributes
  • wmp - move the mouse pointer
  • wmv - move a window
  • wrs - resize a window
  • wtf - focus a window
  • wtp - teleport a window




  • xmag - allows you to magnify portions of an X screen. If no explicit region is specified, a square with the pointer in the upper left corner is displayed indicating the area to be enlarged. The area can be dragged out to the desired size by pressing Button 2. Once a region has been selected, a window is popped up showing a blown up version of the region in which each pixel in the source image is represented by a small square of the same color. Pressing Button1 in the enlargement window shows the position and RGB value of the pixel under the pointer until the button is released. Typing Q or ^C in the enlargement window exits the program.


  • xinput - utility to configure and test X input devices


  • XMacro - package contains two simple, C++ programs (xmacrorec and xmacroplay) for recording and replaying keyboard and mouse events on an X server. This functionality is achieved through the XTest extension.


  • https://github.com/troglobit/xplugd -a UNIX daemon that executes a script on X input and RandR changes, i.e., when a, keyboard, mouse. or a monitor is plugged in or unplugged. Useful in combination with lightweight setups, e.g. when running an X window manager like Awesome, Fluxbox, or similar to detect when docking or undocking a laptop.



  • KPie is a simple window manipulation tool, modeled after devil's pie, with a Lua-based configuration file.


  • telak is a program which displays pictures in root window. It can display content of local file, or download image via http. Telak can be configured to refetch picture every n seconds, so it can be used to display image from webcam.



  • Xearth sets the X root window to an image of the Earth, as seen from your favorite vantage point in space, correctly shaded for the current position of the Sun. By default, xearth updates the displayed image every five minutes. The time between updates can be changed using either X resource or a command-line option. Xearth can also be configured to either create and render into its own top-level X window or render directly into PPM or GIF files; see the man page for details.


  • Xplanet was inspired by Xearth, which renders an image of the earth into the X root window. All of the major planets and most satellites can be drawn, similar to the Solar System Simulator. A number of different map projections are also supported, including azimuthal, Lambert, Mercator, Mollweide, orthographic, and rectangular.




xterm -e "cd `xcwd` && /bin/zsh"



  • Xantfarm simulates an ant hill and displays it in the root window.


  • https://github.com/jcrd/wm-launch - provides a shared library for use with LD_PRELOAD and a command-line tool to set IDs on newly created X11 windows. It is intended to be used by a window manager to uniquely identify clients it launches.

  • https://github.com/andrewchambers/godothecorrectthing - A script to do actions based on the current window and selected text. With this you can: Select any compiler error text in any terminal and open the correct file and line in your text editor. Click on the output of ls in any terminal and open the corresponding file with the correct program. Open any url from any text on your OS and open it in your browser.

  • blast - Blast blows holes through windows

  • xhangglider - fly hanggliders and paragliders on your X root window.

  • xdesktopwaves - a cellular automata setting the background of your X Windows desktop under water. Windows and mouse are like ships on the sea. Each movement of these ends up in moving water waves. You can even have rain and/or storm stirring up the water.

Mouse / pointer / cursor

  • https://en.wikipedia.org/wiki/Pointer_(user_interface) - or mouse cursor (as part of a personal computer WIMP style of interaction) is a symbol or graphical image on the computer monitor or other display device that echoes movements of the pointing device, commonly a mouse, touchpad, or stylus pen. It signals the point where actions of the user take place. It can be used in text-based or graphical user interfaces to select and move other elements. It is distinct from the cursor, which responds to keyboard input. The cursor may also be repositioned using the pointer.






  • movemouse - lets you 'memorize' several positions of the mouse pointer on however many screens you may have and then jump back to any of those positions using keyboard shortcuts. It will also optionally simulate a left mouse button 'click' after the move to raise the focus of the moved to location.



  • GPointingDeviceSettings - a GUI tool for setting pointing device such as TrackPoint or Touchpad. Each UI can be written as dynamic loadable module, so a third party can add its own UI.


  • https://github.com/rvaiya/warpd - small X program which provides a modal keyboard driven interface for cursor manipulation. The program was originally inspired by the mousekeys feature of Kaleidoscope, the firmware for the Keyboardio.

Script GUI


  • xmessage − display a message or query in a window (X-based /bin/echo)


  • Gxmessage - an xmessage clone for GTK based desktops. Gxmessage pops up a dialog window, displays a given message or question, then waits for the user's response. That response is returned as the program's exit code. Because gxmessage is a drop-in alternative to xmessage, gxmessage accepts any option xmessage would, and returns the same exit codes.


  • Dialog - a program that will let you to present a variety of questions or display messages using dialog boxes from a shell script. These types of dialog boxes are implemented (though not all are necessarily compiled into dialog): calendar, checklist, dselect, editbox, form, fselect, gauge, infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, msgbox (message), passwordbox, passwordform, pause, progressbox, radiolist, tailbox, tailboxbg, textbox, timebox, and yesno (yes/no).


  • YAD - yet another dialog, is a tool for create graphical dialogs from shell scripts


  • Zenity - a tool that allows you to display Gtk+ dialog boxes from the command line and through shell scripts. It is similar to gdialog, but is intended to be saner. It comes from the same family as dialog, Xdialog, and cdialog, but it surpasses those projects by having a cooler name.


  • whiptail - display dialog boxes from shell scripts




  • https://github.com/cheesecakeufo/komorebi - an awesome animated wallpapers manager for all Linux platforms. It provides fully customizeable image, video, and web page wallpapers that can be tweaked at any time!

  • https://github.com/glouw/paperview - A high performance animated desktop background setter for X11 that won't set your CPU on fire, drain your laptop battery, or lower ya vidya game FPS.


See also Typography

Some fonts like terminus-font are installed in /usr/share/fonts/local, which is not added to the font path by default. By adding the following lines to ~/.xinitrc, the fonts can be used in X11:

xset +fp /usr/share/fonts/local
xset fp rehash
  # shortnames for fonts

Keyboard input


xmodmap -pke | column -t
  # display keymaps in columns

Each keysym column in the table corresponds to a particular combination of modifier keys:

  • Key
  • Shift+Key
  • mode_switch+Key
  • mode_switch+Shift+Key
  • AltGr+Key
  • AltGr+Shift+Key
xmodmap -e "pointer = 3 2 1"
  # set mouse buttons for left hand

xmodmap -e "pointer = 1 2 3"
  # set mouse buttons for right hand


  • xkeycaps - a graphical front-end to xmodmap. It opens a window that looks like a keyboard; moving the mouse over a key shows what KeySyms and Modifier bits that key generates. Clicking on a key simulates KeyPress/KeyRelease events on the window of your choice. It is possible to change the KeySyms and Modifiers generated by a key through a mouse-based interface. This program can also write an input file for xmodmap to recreate your changes in future sessions.






  • https://github.com/wertarbyte/triggerhappy - a hotkey daemon developed with small and embedded systems in mind, e.g. linux based routers. It attaches to the input device files and interprets the event data received and executes scripts configured in its configuration.

  • https://github.com/alols/xcape - allows you to use a modifier key as another key when pressed and released on its own. Note that it is slightly slower than pressing the original key, because the pressed event does not occur until the key is released. The default behaviour is to generate the Escape key when Left Control is pressed and released on its own. (If you don't understand why anybody would want this, I'm guessing that Vim is not your favourite text editor ;)

  • https://github.com/hanschen/ksuperkey - allows you to open the application launcher in desktop environments such as KDE Plasma and Xfce using the Super key (also known as "Meta" or "the Windows key"). If you hold down the Super key it will still act as a modifier key, allowing you to use it for other keyboard shortcuts.ksuperkey is a small desktop-agnostic application that runs in the background as a daemon. It was forked from xcape by Albin Olsson

  • http://xautomation.sourceforge.net - XAUT (the C library) and the corresponding Python module is a way to programatically simulate keyboard and mouse use, as well as manipulate windows. The inspiration for this came from AutoIt as well as AutoHotkey.

  • http://imwheel.sourceforge.net/imwheel.1.html - a universal mouse wheel and mouse stick translator for the X Windows System. Using either a special version of gpm and it's /dev/gpmwheel FIFO, or the support for a ZAxis on the mouse built into some servers, such as XFree86. Utilizing the input from gpm or X Windows, imwheel translates mouse wheel and mouse stick actions into keyboard events using the XTest extension to X. Use xdpyinfo for information on the supported extensions in your X server.

  • LinEAK - a utility designed to enable the use and configuration of those special keys on Internet, Easy Access and Multimedia keyboards in Linux. It consists of three programs: lineakd: this is the daemon that listens for incoming key and mouse events. lineakconfig: this is the GTK+ GUI, which provides easier configuration. Klineakconfig: this is the KDE GUI which allows you to define keyboards, and configuration mappings for easier configuration. If your keyboard is not directly supported by lineakd, klineakconfig provides an easy to use graphic interface to both getting your keyboard working, and submitting your keyboard for inclusion into lineakd.

  • https://github.com/jersou/mouse-actions - execute some command from mouse events such as clicks/wheel on the side/corners of the screen, or drawing shapes. It's a mix between Easystroke and Compiz edge commands.



Virtual keyboard



  • xvkbd - a virtual (graphical) keyboard program for X Window System which provides a facility to enter characters onto other clients (software) by clicking on a keyboard displayed on the screen. This may be used for systems without a hardware keyboard such as kiosk terminals or handheld devices. This program also has a facility to send characters specified as the command line option to another client.


  • GOK - Gnome Onscreen Keyboard


  • Florence - an open-source on-screen virtual keyboard developed in C and GTK+ for X11 desktop system. As an alternative to a hardware keyboard, Florence allows users to enter characters using a pointing device such as a mouse, a trackball or a touchscreen. It offers four different input method: mouse-based input, touch-screen based input, timer-based auto click, and rambling-based input. Florence supports international keyboard layouts with non-English characters, auto-hide mode, and custom keyboard layout. The default keyboard can be extended to include function keypad, number keypad, arrow keypad, and action keypad. Florence can be integrated with GNOME Display Manager (GDM) to show a virtual keyboard during GNOME desktop login.


  • Fcitx - an input method framework with extension support. Currently it supports Linux and Unix systems like freebsd. It has three built-in Input Method Engine, Pinyin, QuWei and Table-based input methods.Fcitx tries to provide a native feeling under all desktop as well as a light weight core. You can easily customize it to fit your requirements.

Keyboard layout

Drag and drop

  • https://github.com/mwh/dragon - simple drag-and-drop source/sink for X. Many programs, particularly web applications, expect files to be draggedinto them now. If you don't habitually use a file manager that is a problem. dragon is a lightweight drag-and-drop source for X where you can run "dragon file.tar.gz" to get a window with just that file in it, ready to be dragged where you need it.


xsetroot -cursor_name left_ptr
XCURSOR_THEME=SomeThemeName xclock
export XCURSOR_PATH=${XCURSOR_PATH}:~/.local/share/icons

Screen area

Backlight / brightness

Intel chipset:

Section "Device"
   Identifier  "Card0"
   Driver      "intel"
   Option      "Backlight"  "intel_backlight"


  • xgamma(1) - Alter a monitor's gamma correction through the X server


  • xdimmer is a lightweight X11 utility to dim the screen backlight when idle, then brighten it back up when mouse or keyboard activity is detected. This power-saving behavior is common on other operating systems and in bloated X11 frameworks like GNOME.


  • Light - a program to control backlight controllers under GNU/Linux, it is the successor of lightscript, which was a bash script with the same purpose, and tries to maintain the same functionality.




  • f.lux - makes the color of your computer's display adapt to the time of day, warm at night and like sunlight during the day. It's even possible that you're staying up too late because of your computer. You could use f.lux because it makes you sleep better, or you could just use it just because it makes your computer look better.


  • Redshift - adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night. This program is inspired by f.lux (please see this post for the reason why I started this project).



  • https://gitlab.com/chinstrap/gammastep - Adjust the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night.


  • https://github.com/jumper149/blugon - a simple and fast Blue Light Filter, that is highly configurable and provides a command line interface. The program can be run just once or as a daemon (manually or via systemd). There are several different backends available. blugon calculates the screen color from your local time and configuration.




  • https://github.com/Hummer12007/brightnessctl - allows you read and control device brightness. Devices, by default, include backlight and LEDs (searched for in corresponding classes). If omitted, the first found device is selected.It can also preserve current brightness before applying the operation (allowing for usecases like disabling backlight on lid close).



Add the following to a file in /etc/X11/xorg.conf.d/ in the Monitor section:

Option "DPMS" "true"

Add the following to the ServerLayout section, change the times (in minutes) as necessary:

Option "StandbyTime" "10"
Option "SuspendTime" "20"
Option "OffTime" "30"

Or to change on the fly:

xset s off
  # Disable screen saver blanking
xset s 3600 3600
  # Change blank time to 1 hour

xset -dpms
  # Turn off DPMS
xset s off -dpms
  # Disable DPMS and prevent screen from blanking

xset dpms force off
  # Turn off screen immediately
xset dpms force standby
  # Standby screen
xset dpms force suspend
  # Suspend screen


  • https://github.com/lleonini/lightsOn - Bash script that prevents the screensaver and display power management (DPMS) to be activated when you are watching Flash(and HTML5) Videos fullscreen on Firefox, Chromium, Google Chrome. Can detect mplayer, minitube, and VLC when they are fullscreen too. Also, screensaver can be prevented when certain specified programs are running. This script can be used to control X11 Screen Saver Extension and DPMS settings, read the source. Optionally can delay the screensaver when specific outputs are connected.



  • dapper - a simple lightweight desktop application auto-starter. It will read .desktop files in the autostart directories, all according to the FreeDesktop autostart specifications. You can define which desktop to start applications for (e.g. GNOME, XFCE, etc) in configuration file (~/.config/dapper.conf) or from command line. Note that autostarting desktop application is probably already taken care of if you do use a desktop environment/session manager.


  • http://en.wikipedia.org/wiki/Inter-Client_Communication_Conventions_Manual - ICCCM or I39L short for "I", 39 letters and "L")[1] is a standard for interoperability between X Window System clients of the same X server. It is primarily used for communication between normal clients and the window manager. X deliberately specifies "mechanism, not policy". As such, an additional specification beyond the X protocol itself was needed for client interoperation. The ICCCM specifies cut and paste buffers, window manager interaction, session management, how to manipulate shared resources and how to manage device colours. These low-level functions are generally implemented within widget toolkits or desktop environments, meaning that application programmers rarely work directly with the ICCCM itself but instead use the higher-level toolkit functions that implement it.


  • http://en.wikipedia.org/wiki/Extended_Window_Manager_Hints - aka NetWM or Net WM, is an X Window System standard for window managers. It defines various interactions between window managers, utilities, and applications, all part of an entire desktop environment. It builds on the functionality of the Inter-Client Communication Conventions Manual (ICCCM).

  • ewmhstatus - Outputs the current EWMH desktop name and window title

"The main caveats are that in Xinerama/XRandR mode, you'll have only one root window. And the root window is where you must store the NET_WM X properties… So you cannot handle screens in a independant way like awesome does. That's really a shame. ... So far, I think EWMH is nice but is really too narrow-minded for software and people who want to think window management in a different way."





  • https://github.com/bk138/gromit-mpx - an on-screen annotation tool that works with any Unix desktop environment under X11 as well as Wayland.Its main use is for making presentations of some application. Normally, you would have to move the mouse pointer around the point of interest until hopefully everybody noticed it. With Gromit-MPX, you can draw everywhere onto the screen, highlighting some button or area.

Text replacement

  • https://github.com/federico-terzi/espanso - detects when you type a specific keyword and replaces it with something else. This is useful in many ways: Save a lot of typing, expanding common sentences. Create system-wide code snippets. Execute custom scripts. Use emojis like a pro.



  • XAUT - C library and the corresponding Python module, a way to programatically simulate keyboard and mouse use, as well as manipulate windows. The inspiration for this came from AutoIt as well as AutoHotkey.


  • xlax - accepts keyboard input from the user and sends it to multiple X11 windows (usually xterms or other terminal windows). It's an ideal tool for system adminstrators who have to do the same thing on multiple machines, or in multiple directories. It allows the virtual connections to windows to be turned on and off, so that only a subset of current windows are in use (this is shown in the diagram above, where the third and fifth windows in the list are not selected). The user can also assign a different text string to each window which will be sent by clicking on the "Send String" button. In a typical usage, a user might need to check a few things and run a number of commands on five different machines. After setting up all the windows to work with xlax (see below), and with send strings set to hostnames, the user will type "ssh " and then click "Send String", and then type return, and the user will simultaneously log into those five different machines. They can then type the commands once and see them run on all machines at the same time.



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

  # remote xclock should appear locally

xhost +
  # add address to x access control list
  # 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 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 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

Xephyr :5 & sleep 1 ; DISPLAY=:5 awesome


  • 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. [11]

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



  • 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 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 - 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 - 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 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.