From ArchWiki
Revision as of 03:16, 13 December 2011 by Fengchao (talk | contribs) (File configuration: Shrink title level)
Jump to: navigation, search

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.

Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어

External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Template:Article summary start

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 end

The ~/.xinitrc file is a shell script read by xinit and startx. It is typically used to execute window managers and other programs when starting X - e.g. starting daemons and setting environment variables. The xinit program is used to start the X Window System and works as a first client program on systems that cannot start X directly from /etc/init, or in environments that use multiple window systems. The ~/.xinitrc file is therefore a simple way to start X, usually in conjunction with running the startx script directly from inittab.

File examples

Following is a simple ~/.xinitrc file example, including some startup programs:


xrdb -merge ~/.Xresources         # update x resources db

xscreensaver -no-splash &         # starts screensaver daemon 
xsetroot -cursor_name left_ptr &  # sets the cursor icon
sh ~/.fehbg &                     # sets the background image

exec openbox-session              # starts the window manager

Following example can be used as a template for executing various window managers, by uncommenting the one to be used, e.g. Openbox:

# ~/.xinitrc
# Executed by startx (run your window manager from here)
# exec ion
# exec jwm
# exec wmaker
# exec startkde
# exec icewm
# exec pekwm
# exec blackbox
# exec /usr/bin/ratpoison
# exec gnome-session
# exec startfluxbox
# exec startxfce4
# exec xfce4-session
exec openbox-session
# exec startlxde

Prepending exec is recommended as it replaces the current process with the manager, but its not necessary if all additional desktop/window managers are commented out as in the above example. Use the full path to the window manager or desktop environment launcher when possible. You can get the path to it by using type - i.e. type startkde.

In addition to the examples provided here, you can find another at /etc/skel/.xinitrc provided by xorg-xinit. To use it, simply copy it to your home directory:

$ cp /etc/skel/.xinitrc ~/

File configuration

When a display manager is not used, it is important to keep in mind that the life of the X session starts and ends with ~/.xinitrc. This means that once the script quits, X quits regardless of whether you still have running programs (including your window manager). Therefore it's important that the window manager quitting and X quitting should coincide. This is easily achieved by running the window manager as the last program in the script.

Note that in the first example above, programs such as cairo-compmgr, xscreensaver, xsetroot and sh are run in the background (& suffix added). Otherwise, the script would halt and wait for each program and daemons to exit before executing openbox-session. Also note that openbox-session is not backgrounded. This ensures that the script will not quit until openbox does. If you run the startx script manually, ending the script will terminate X and leave you with whatever virtual consoles /etc/inittab has started.

If running the file from /etc/inittab and have set the line to respawn instead of once, ~/.xinitrc will be re-run. This way X can be restarted without having to restart the computer.

The following sections explains how to configure ~/.xinitrc for Multiple WMs and DEs.

On the command line

If you have a working ~/.xinitrc, but just want to try other WM/DE you can run it by issuing xinit followed by the path to the window manager:

xinit /full/path/to/window-manager

Note that the full path is required. Optionally, you can pass options to the X server after appending -- - e.g.:

xinit /usr/bin/enlightenment -- -br +bs -dpi 96

The following example ~/.xinitrc shows how to start a particular window manager with an argument:

# ~/.xinitrc
# Executed by startx (run your window manager from here)

if [[ $1 == "fluxbox" ]]
  exec startfluxbox
elif [[ $1 == "scrotwm" ]]
  exec startscrotwm
  echo "Choose a window manager"

Using this example you can start fluxbox or scrotwm with the command xinit fluxbox or xinit scrotwm.

At startup

You can also have a choice of window managers and desktop environments at startup, using just ~/.xinitrc and GRUB and no display manager. The idea is to take advantage of the fact that Arch does not make any particular use of the runlevel system. The following ~/.xinitrc tests for the current runlevel and will start Openbox and GNOME on runlevels 5 and 4 respectively:

rl=$(runlevel | grep -o [0-6])

case $rl in
	4) exec gnome-session;;
	5) exec openbox-session;;

Choosing between different runlevels is simply a matter of cloning a GRUB entry and adding the desired runlevel to the kernel arguments. Inserting the runlevel at the end of the 'kernel' line indicates that the inittab default of runlevel 5 should be overridden and replaced with the desired runlevel, 4 in this instance:

title  Arch Linux GNOME
root   (hd0,2)
kernel /boot/vmlinuz-linux root=/dev/sda1 ro 4
initrd /boot/initramfs-linux.img

Finally, you will need to ensure that the ~/.xinitrc file is actually run at the chosen runlevel. Using the tip from Start X at boot#/etc/inittab, you can edit the inittab to simply run startx on the desired runlevel which will in turn use your ~/.xinitrc script:

x:45:once:/bin/su PREFERED_USER -l -c "/bin/bash --login -c startx >/dev/null 2>&1"

Notice that "45" means that this will happen on both runlevels 4 and 5. The final differentiation between 4 and 5 will then come in ~/.xinitrc as described above. This is preferable to attempt differentiating in the inittab file as we stick pretty close to using the various configuration files as they were intended.

Tips and tricks

PolicyKit and ConsoleKit

Various desktop environment features and applications expect PolicyKit and ConsoleKit to be active, and will produce errors if absent. A common error to notice is the inability to access shutdown or reboot prompts from desktop environment windows, and failure to mount USB devices, CD-ROMs etc. without root permissions. Most modern display managers will start PolicyKit and ConsoleKit automatically. When only using ~/.xinitrc with your display manager e.g Slim, you should execute the window manager as follows:

exec ck-launch-session gnome-session
Note: Beware that Template:Package Official and Template:Package Official packages must be present in your installation.

As of 2011-10-09, there is combination of factor that cause a bug: if you have Not authorized error with any application in your desktop, this is it.

It is because you use the snippet (also found in /etc/skel/.xinitrc) that source all the files in /etc/X11/xinit/xinitrc.d The problem is /etc/X11/xinit/xinitrc.d/30-bus that launches dbus before ck-launch-session is run, causing the bug FS#25031

To fix it either remove that snippet or use that line in your ~/.xinitrc

exec ck-launch-session dbus-launch gnome-session
until FS#25031 is fixed. See also the notes of Xfce#Manually for more details

Starting the WM first

If you need to start your window manager before other additional applications, use the following method:


openbox & wmpid=$!

urxvtd -q -f -o &
xscreensaver -no-splash &
fbpanel &

wait $wmpid

The first line runs openbox as a background process and immediately stores the process id ($!) in the variable wmpid. On the last line, the wait builtin is used to wait until the process specified by wmpid terminates.

More resources