Difference between revisions of "Xorg"
(→Starting GUI programs remotely)
|Line 492:||Line 492:|
=== Starting GUI programs remotely ===
=== Starting GUI programs remotely ===
=== On-demand disabling and enabling of input sources ===
=== On-demand disabling and enabling of input sources ===
Revision as of 06:56, 16 September 2013
ro:Xorg zh-CN:Xorg zh-TW:Xorg Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end From http://www.x.org/wiki/:
- The 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.
Xorg is the public, open-source implementation of the X window system version 11. Since Xorg is the most popular choice among Linux users, its ubiquity has led to making it an ever-present requisite for GUI applications, resulting in massive adoption from most distributions. See the Xorg Wikipedia article or visit the Xorg website for more details.
- 1 Installation
- 2 Running
- 3 Configuration
- 4 Input devices
- 4.1 Mouse acceleration
- 4.2 Touchpad Synaptics
- 4.3 Keyboard settings
- 4.4 InputClasses
- 5 Monitor settings
- 6 Composite
- 7 Tips and tricks
- 8 Troubleshooting
- 8.1 Common problems
- 8.2 Ctrl+Alt+Backspace does not work
- 8.3 CTRL right key does not work with oss keymap
- 8.4 X clients started with "su" fail
- 8.5 Program requests "font '(null)'"
- 8.6 Frame-buffer mode problems
- 8.7 DRI with Matrox cards stops working
- 8.8 Recovery: disabling Xorg before GUI login
- 8.9 X failed to start: Keyboard initialization failed
- 8.10 Black screen, No protocol specified.., Resource temporarily unavailable for all or some users
Additionally, some packages from thegroup are useful for certain configuration tasks, they are pointed out in the relevant section/page.
The Linux kernel includes open-source video drivers and support for hardware accelerated framebuffers. However, userland support is required for OpenGL and 2D acceleration in X11.
First, identify your card:
$ lspci | grep VGA
Then install an appropriate driver. You can search the package database for a complete list of open-source video drivers:
$ pacman -Ss xf86-video
The default graphics driver is vesa (package), which handles a large number of chipsets but does not include any 2D or 3D acceleration. If a better driver cannot be found or fails to load, Xorg will fall back to vesa.
In order for video acceleration to work, and often to expose all the modes that the GPU can set, a proper video driver is required:
(for 32-bit applications on Arch x86_64)
|Intel||Open source||Intel Graphics|
Xorg should run smoothly without closed source drivers, which are typically needed only for advanced features such as fast 3D-accelerated rendering for games, dual-screen setups, and TV-out.
See also: Start X at Login
If you want to start X without a display manager, install the package. Optionally, the packages , and allows for a default environment, as described below.
xinit commands will start the X server and clients (the
startx script is merely a front end to the
xinit command). To determine the client to run,
xinit will first look to parse a
~/.xinitrc file in the user's home directory. In the absence of
~/.xinitrc, it defaults to the global file
/etc/X11/xinit/xinitrc, which defaults to starting a basic environment with the Twm window manager, Xclock and Xterm.
startx, you are responsible for passing
-nolisten tcpand ensuring the session does not break by starting X on a different tty.
For more information, see xinitrc.
- If a problem occurs, then view the log at
/var/log/Xorg.0.log. Be on the lookout for any lines beginning with
(EE), which represent errors, and also
(WW), which are warnings that could indicate other issues.
- If there is an empty
.xinitrcfile in your
$HOME, either delete or edit it in order for X to start properly. If you do not do this X will show a blank screen with what appears to be no errors in your
Xorg.0.log. Simply deleting it will get it running with a default X environment.
/etc/X11/xorg.conf.d, and no extra configuration is necessary for most setups.
Xorg uses a configuration file called
xorg.conf and files ending in the suffix
.conf for its initial setup: the complete list of the folders where these files are searched can be found at  or by running
man xorg.conf, together with a detailed explanation of all the available options.
Using .conf files
/etc/X11/xorg.conf.d/ directory stores user-specific configuration. You are free to add configuration files there, but they must have a
.conf suffix: the files are read in ASCII order, and by convention their names start with
XX- (two digits and a hyphen, so that for example 10 is read before 20). These files are parsed by the X server upon startup and are treated like part of the traditional
xorg.conf configuration file. The X server essentially treats the collection of configuration files as one big file with entries from
xorg.conf at the end.
Xorg can also be configured via
/etc/xorg.conf. You can also generate a skeleton for
# Xorg :0 -configure
This should create a
xorg.conf.new file in
/root/ that you can copy over to
- Sample 1
- Note: Sample configuration file using
/etc/X11/xorg.conf.d/10-evdev.conffor the keyboard layouts. Note the commented out
- Sample 1
- Note: This is the
10-evdev.conffile that goes with the xorg.conf sample 1.
- Note: nvidia-ck binary drivers (v325); Dual GPU, Dual Monitor, Dual Screen; No Twinview, No Xinerama; Rotated and vertically placed screen1 above screen0.
Udev will detect your hardware and evdev will act as the hotplugging input driver for almost all devices. Udev is provided by and is required by , so there is no need to explicitly install those packages. If evdev does not support your device, install the needed driver from the group.
You should have
10-evdev.conf in the
/etc/X11/xorg.conf.d directory, which manages the keyboard, the mouse, the touchpad and the touchscreen.
See the main page: Mouse acceleration
See the main page: Touchpad Synaptics
See the main page: Keyboard Configuration in Xorg
InputClasses are a new type of configuration section that does not apply to a single device but rather to a class of devices, including hotplugged devices. An InputClass section's scope is limited by the matches specified – to apply to an input device, all matches must apply to a device. An example InputClass section is provided below:
Section "InputClass" Identifier "touchpad catchall" MatchIsTouchpad "on" Driver "synaptics" EndSection
The next snippet might also be helpful:
Section "InputClass" Identifier "evdev touchpad catchall" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Driver "evdev" EndSection
If this snippet is present in the
xorg.conf or xorg.conf.d, any touchpad present in the system is assigned the synaptics driver. Note that due to precedence order (alphanumeric sorting of xorg.conf.d snippets) the Driver setting overwrites previously set driver options – the more generic the class, the earlier it should be listed. The default snippet shipped with the package is
00-evdev.conf and applies the evdev driver to all input devices.
The match options specify which devices a section may apply to. To match a device, all match lines must apply. The following match lines are supported (with examples):
MatchIsJoystick– boolean options to apply to a group of devices.
MatchProduct "foo|bar": match any device with a product name containing either "foo" or "bar"
MatchVendor "foo|bar|baz": match any device with a vendor string containing either "foo", "bar", or "baz"
MatchDevicePath "/dev/input/event*": match any device with a device path matching the given patch (see fnmatch(3) for the allowed pattern)
MatchTag "foo|bar": match any device with a tag of either "foo" or "bar". Tags may be assigned by the config backend – udev in our case – to label devices that need quirks or special configuration.
An example section for user-specific configuration is:
Section "InputClass" Identifier "lasermouse slowdown" MatchIsPointer "on" MatchProduct "Lasermouse" MatchVendor "LaserMouse Inc." Option "ConstantDeceleration" 20 EndSection
This section would match a pointer device containing "Lasermouse" from "Lasermouse Inc." and apply a constant deceleration of 20 on this device – slowing it down by factor 20.
Some devices may get picked up by the X server when they really should not be. These devices can be configured to be ignored:
Section "InputClass" Identifier "no need for accelerometers in X" MatchProduct "accelerometer" Option "Ignore" "on" EndSection
The following subsections describe example configurations for commonly used configuration options. Note that if you use a desktop environment such as GNOME or KDE, options you set in the xorg.conf may get overwritten with user-specific options upon login.
Example: wheel emulation (for a trackpoint)
If you own a computer with a Trackpoint (a Thinkpad, for example) you can add the following to the
xorg.conf to use the middle button to emulate a mouse wheel:
Section "InputClass" Identifier "Wheel Emulation" MatchIsPointer "on" MatchProduct "TrackPoint" Option "EmulateWheelButton" "2" Option "EmulateWheel" "on" EndSection
For full support of TrackPoints (including horizontal scrolling) you can use the following:
Section "InputClass" Identifier "Trackpoint Wheel Emulation" MatchProduct "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device" MatchDevicePath "/dev/input/event*" Option "EmulateWheel" "true" Option "EmulateWheelButton" "2" Option "Emulate3Buttons" "false" Option "XAxisMapping" "6 7" Option "YAxisMapping" "4 5" EndSection
Tap-to-click can be enabled in the mouse configuration dialog (in the touchpad tab) but if you need tapping enabled at gdm already, the following snippet does it for you:
Section "InputClass" Identifier "tap-by-default" MatchIsTouchpad "on" Option "TapButton1" "1" EndSection
Example: keyboard layout and model on Acer 5920G laptop
Keyboard model and layout may be set in the file
/etc/X11/xorg.conf.d/keyboard.conf or any other .conf file in the same directory.
MatchIsKeyboard "yes": set the input device to a keyboard
Option "XkbModel" "acer_laptop": set the keyboard model to an Acer laptop keyboard. You may replace
acer_laptopwith your actual keyboard layout.
Option "XkbLayout" "be": set the keyboard layout to belgian. You may replace
bewith whatever layout you have.
Option "XkbVariant" "sundeadkeys": set the layout variant to Sun dead keys. You may omit the
XkbVariantoption if you stick with the default variant.
Note that a list of keyboard layouts and models can be found in
Section "InputClass" Identifier "Keyboard Defaults" MatchIsKeyboard "yes" Option "XkbModel" "acer_laptop" Option "XkbLayout" "be" Option "XkbVariant" "sundeadkeys" EndSection
Third button emulation allows you to use the 1 and 2 buttons (left and right click) together to produce a button 3 event (middle-click), which is really useful for copy and paste in X.
We will modify the mouse input catchall in
Section "InputClass" Identifier "evdev pointer catchall" MatchIsPointer "on" MatchDevicePath "/dev/input/event*" Driver "evdev" Option "Emulate3Buttons" "True" Option "Emulate3Timeout" "25" EndSection
Here you see the
Option "Emulate3Buttons" "True" and
Option "Emulate3Timeout" "25" options that specify that 3 buttons should be emulated and the delay to recognize both buttons down as a middle click is 25ms.
First, create a new config file, such as
Section "Monitor" Identifier "Monitor0" EndSection Section "Device" Identifier "Device0" Driver "vesa" #Choose the driver used for this monitor EndSection Section "Screen" Identifier "Screen0" #Collapse Monitor and Device section to Screen section Device "Device0" Monitor "Monitor0" DefaultDepth 16 #Choose the depth (16||24) SubSection "Display" Depth 16 Modes "1024x768_75.00" #Choose the resolution EndSubSection EndSection
See main article Multihead for general information.
See also GPU-specific instructions:
- NVIDIA#Multiple monitors
- Nouveau#Dual Head
- AMD Catalyst#Double Screen (Dual Head / Dual Screen / Xinerama)
- ATI#Dual Head setup
More than one graphics card
You must define the correct driver to use and put the bus ID of your graphic cards.
Section "Device" Identifier "Screen0" Driver "nouveau" BusID "PCI:0:12:0" EndSection Section "Device" Identifier "Screen1" Driver "radeon" BusID "PCI:1:0:0" EndSection
To get your bus ID:
$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation G96 [GeForce 9600M GT] (rev a1)
The bus ID here is 1:0:0.
Display size and DPI
The DPI of the X server is determined in the following manner:
- The -dpi command line option has highest priority.
- If this is not used, the DisplaySize setting in the X config file is used to derive the DPI, given the screen resolution.
- If no DisplaySize is given, the monitor size values from DDC are used to derive the DPI, given the screen resolution.
- If DDC does not specify a size, 75 DPI is used by default.
In order to get correct dots per inch (DPI) set, the display size must be recognized or set. Having the correct DPI is especially necessary where fine detail is required (like font rendering). Previously, manufacturers tried to create a standard for 96 DPI (a 10.3" diagonal monitor would be 800x600, a 13.2" monitor 1024x768). These days, screen DPIs vary and may not be equal horizontally and vertically. For example, a 19" widescreen LCD at 1440x900 may have a DPI of 89x87. To be able to set the DPI, the Xorg server attempts to auto-detect your monitor's physical screen size through the graphic card with DDC.
When the Xorg server knows the physical screen size, it will be able to set the correct DPI depending on resolution size. Xorg always sets dpi to 96. See this, this and finally this.
To see if your display size and DPI are detected/calculated correctly:
$ xdpyinfo | grep -B2 resolution
Check that the dimensions match your display size. If the Xorg server is not able to correctly calculate the screen size, it will default to 75x75 DPI and you will have to calculate it yourself.
If you have specifications on the physical size of the screen, they can be entered in the Xorg configuration file so that the proper DPI is calculated:
Section "Monitor" Identifier "Monitor0" DisplaySize 286 179 # In millimeters EndSection
If you only want to enter the specification of your monitor without creating a full xorg.conf create a new config file. For example (
Section "Monitor" Identifier "<default monitor>" DisplaySize 286 179 # In millimeters EndSection
If you do not have specifications for physical screen width and height (most specifications these days only list by diagonal size), you can use the monitor's native resolution (or aspect ratio) and diagonal length to calculate the horizontal and vertical physical dimensions. Using the Pythagorean theorem on a 13.3" diagonal length screen with a 1280x800 native resolution (or 16:10 aspect ratio):
$ echo 'scale=5;sqrt(1280^2+800^2)' | bc # 1509.43698
This will give the pixel diagonal length and with this value you can discover the physical horizontal and vertical lengths (and convert them to millimeters):
$ echo 'scale=5;(13.3/1509)*1280*25.4' | bc # 286.43072 $ echo 'scale=5;(13.3/1509)*800*25.4' | bc # 179.01920
Setting DPI manually
DPI can be set manually if you only plan to use one resolution (DPI calculator):
Section "Monitor" Identifier "Monitor0" Option "DPI" "96 x 96" EndSection
If you use an NVIDIA card, you can manually set the DPI adding the options bellow on
/etc/X11/xorg.conf.d/20-nvidia.conf (inside Device section):
Option "UseEdidDpi" "False" Option "DPI" "96 x 96"
For RandR compliant drivers, you can set it by:
$ xrandr --dpi 96
See Execute commands after X start to make it permanent.
DPMS (Display Power Management Signaling) is a technology that allows power saving behaviour of monitors when the computer is not in use. This will allow you to have your monitors automatically go into standby after a predefined period of time. See: DPMS
The Composite extension for X causes an entire sub-tree of the window hierarchy to be rendered to an off-screen buffer. Applications can then take the contents of that buffer and do whatever they like. The off-screen buffer can be automatically merged into the parent window or merged by external programs, called compositing managers. See the following page for more info.
- Compiz -- The original composite/window manager from Novell
- Xcompmgr -- A simple composite manager capable of drop shadows and primitive transparency
- Compton -- A fork of xcompmgr with feature improves and bug fix
- Cairo Composite Manager -- A versatile and extensible composite manager which uses cairo for rendering.
- Wikipedia:Compositing window manager
Tips and tricks
X startup tweaking (startx)
For X's option reference see:
$ man Xserver
The following options have to be appended to the variable
"defaultserverargs" in the
- Enable deferred glyph loading for 16 bit fonts:
Nested X session
To run a nested session of another desktop environment:
$ /usr/bin/Xnest :1 -geometry 1024x768+0+0 -ac -name Windowmaker & wmaker -display :1
This will launch a Window Maker session in a 1024 by 768 window within your current X session.
This needs the packageto be installed.
Starting GUI programs remotely
See X11 over SSH
On-demand disabling and enabling of input sources
With the help of xinput you can temporarily disable or enable input sources. This might be useful, for example, on systems that have more than one mouse, such as the ThinkPads and you would rather use just one to avoid unwanted mouse clicks.
Find the ID of the device you want to disable:
For example in a Lenovo ThinkPad T500, the output looks like this:
⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ TPPS/2 IBM TrackPoint id=11 [slave pointer (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Sleep Button id=8 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)] ↳ ThinkPad Extra Buttons id=12 [slave keyboard (3)]
Disable the device with
xinput --disable device_id, where device_id is the device ID you want to disable. In this example we'll disable the Synaptics Touchpad, with the ID 10:
$ xinput --disable 10
To re-enable the device, just issue the opposite command:
$ xinput --enable 10
If Xorg will not start, the screen is completely black, the keyboard and mouse are not working, etc., first take these simple steps:
- Check the log file:
- Check specific pages in Category:Input devices if you have issues with keyboard, mouse, touchpad etc.
- Finally, search for common problems in ATI, Intel and NVIDIA articles.
Ctrl+Alt+Backspace does not work
/etc/X11/xorg.conf.d/10-evdev.conf, simply add the following:
Section "InputClass" Identifier "Keyboard Defaults" MatchIsKeyboard "yes" Option "XkbOptions" "terminate:ctrl_alt_bksp" EndSection
- Using Gnome, an alternative would be to install the gnome-tweak-tool from extra. Within the Gnome Tweak Tool: Typing > Terminate and select the option
Ctrl+Alt+Backspacefrom the dropdown menu. This reactivates the keyboard shortcut for killing the X server in Gnome.
- On KDE, this system-wide setting has no effect. To restore, go to Kickoff > Computer > System Settings which will open up the System Settings window. Click on 'Input Devices'. In this new window click the Keyboard tab and then click on the advanced tab. In this new window, click the box for 'Configure keyboard options.' Expand the entry for 'Key sequence to kill the X server' and ensure
Ctrl+Alt+Backspaceis checked. Click Apply and close the System Settings window. You now have your
Ctrl+Alt+Backspaceback in KDE.
Another way is to put this line in xinitrc:
$ setxkbmap -option terminate:ctrl_alt_bksp
CTRL right key does not work with oss keymap
Edit as root
/usr/share/X11/xkb/symbols/fr, and change the line:
// include "level5(rctrl_switch)"
Then restart X or reboot.
X clients started with "su" fail
If you are getting "Client is not authorized to connect to server", try adding the line:
session optional pam_xauth.so
pam_xauth will then properly set environment variables and handle
Program requests "font '(null)'"
- Error message: "unable to load font `(null)'."
Some programs only work with bitmap fonts. Two major packages with bitmap fonts are available,and . You do not need both; one should be enough. To find out which one would be better in your case, try this:
$ xdpyinfo | grep resolution
and use what is closer to you (75 or 100 instead of XX)
# pacman -S xorg-fonts-XXdpi
Frame-buffer mode problems
If X fails to start with the following log messages,
(WW) Falling back to old probe method for fbdev (II) Loading sub module "fbdevhw" (II) LoadModule: "fbdevhw" (II) Loading /usr/lib/xorg/modules/linux//libfbdevhw.so (II) Module fbdevhw: vendor="X.Org Foundation" compiled for 1.6.1, module version=0.0.2 ABI class: X.Org Video Driver, version 5.0 (II) FBDEV(1): using default device Fatal server error: Cannot run in framebuffer mode. Please specify busIDs for all framebuffer devices
# pacman -R xf86-video-fbdev
DRI with Matrox cards stops working
If you use a Matrox card and DRI stops working after upgrading to Xorg, try adding the line:
Option "OldDmaInit" "On"
to the Device section that references the video card in
Recovery: disabling Xorg before GUI login
If Xorg is set to boot up automatically and for some reason you need to prevent it from starting up before the login/display manager appears (if the system is wrongly configured and Xorg does not recognize your mouse or keyboard input, for instance), you can accomplish this task with two methods.
- From the GRUB menu, you can specify the runlevel in the kernel line by adding a number to the end of the kernel line specifying the run level you want. The following example sets the run level to 3:
kernel /boot/vmlinuz-linux root=/dev/disk/by-uuid/..ro 3
- If you have not only a faulty system that makes Xorg unusable, but you have also set the GRUB menu wait time to zero, or cannot otherwise use GRUB to prevent Xorg from booting, you can use the Arch Linux live CD. Boot up the live CD and log in as root. You need a mount point, such as
/mnt, and you need to know the name of the partition you want to mount.
You can use the command,
# fdisk -l
to see your partitions. Usually, the one you want will be resembling
/dev/sda1. Then, to mount this to
# mount /dev/sda1 /mnt
Then your filesystem will show up under
/mnt. From here you can delete the
gdm daemon to prevent Xorg from booting up normally or make any other necessary changes to the configuration.
X failed to start: Keyboard initialization failed
If your hard disk is full, startx will fail.
/var/log/Xorg.0.log will end with:
(EE) Error compiling keymap (server-0) (EE) XKB: Couldn't compile keymap (EE) XKB: Failed to load keymap. Loading default keymap instead. (EE) Error compiling keymap (server-0) (EE) XKB: Couldn't compile keymap XKB: Failed to compile keymap Keyboard initialization failed. This could be a missing or incorrect setup of xkeyboard-config. Fatal server error: Failed to activate core devices. Please consult the The X.Org Foundation support at http://wiki.x.org for help. Please also check the log file at "/var/log/Xorg.0.log" for additional information. (II) AIGLX: Suspending AIGLX clients for VT switch
Make some free space on your root partition and X will start.
X creates configuration and temporary files in current user's home directory. Make sure there is free disk space available on the partition your home directory resides in. Unfortunately, X server does not provide any more obvious information about lack of disk space in this case.