Xinitrc
From FrugalWiki
Dansk – Deutsch – English – Español – Français – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Polski – Português – Română – Slovenský – Suomi – Svenska – Türkçe – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어
The xinit program is used to start the X Window System server and 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]].
Contents |
How it works
The .xinitrc file is really just one more shell script to run. It can be used to start various applications you want to associate with starting X, e.g. the X screensaver, and to set global environment variables, like MOZ_PLUGIN_PATH. Its foremost use however, is as a replacement for a display manager when on a single-user machine.
When a display manager is not used, it is important to keep in mind that the life of your X session starts and ends with the .xinitrc script. What this means is that once the script finishes, X quits regardless of whether you still have running programs (including your window manager). It is therefore 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 .xinitrc script, e.g.:
#!/bin/sh /usr/bin/autocutsel -fork & /usr/bin/autocutsel -selection PRIMARY -fork & /usr/local/bin/urxvtd -q -f -o & /usr/bin/xscreensaver -no-splash & /usr/lib/notification-daemon/notification-daemon & export MOZ_PLUGIN_PATH="/usr/lib/mozilla/plugins:/opt/mozilla/lib/plugins" exec openbox-session
Notice that applications such as autocutsel, xscreensaver, urxvtd, and notification-daemon are run in the background (& appendage). Otherwise, the script would halt and wait for the programs and daemons to quit before continuing to export the variable line and executing openbox-session.
The openbox-session line starting an Openbox session however, 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 your inittab has started.
If running it from inittab and have set the line to 'respawn' (rather than 'once'), .xinitrc will be run again. In this way X can be restarted without having to restart the computer.
A standard .xinitrc
Using this template you can simply uncomment your choice, e.g. GNOME:
#!/bin/sh # # ~/.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 # exec startlxde
Multiple DE options
On the command line
If you have a working .xinitrc, but just want to try other WM/DE you can run xinit from command line like this
xinit /full/path/to/window-manager
The full path is required. Optionally you can pass options to X server after '--', e.g.
xinit /usr/bin/enlightenment -- -br +bs -dpi 96
You can use the following example .xinitrc to start a particular window manager with an argument:
#!/bin/sh # # ~/.xinitrc # # Executed by startx (run your window manager from here) if [[ $1 == "fluxbox" ]] then exec startfluxbox elif [[ $1 == "scrotwm" ]] then exec startscrotwm else echo "Choose a window manager" fi
Using this .xinitrc you can start Fluxbox with the command xinit fluxbox or start scrotwm with the command 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 doesn't 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;; esac
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/vmlinuz26 root=/dev/sda1 ro 4 initrd /boot/kernel26.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.
Policykit
Various Gnome(*) applications expect policykit to be active, and will produce errors if absent. Login managers such as Gdm will start PolicyKit automatically, but when using .xinitrc only, you should make it run like so:
exec ck-launch-session gnome-session
(*) I specifically recall Rhythmbox/Gstreamer, but there are probably many more examples. <Expand and improve this section plz!>
Alternative method
If you need to start your window manager before launching additional applications, use the following method:
#!/bin/bash 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.