Life Codecs @ NamingCrisis.net

Ruminations. Reflections. Refractions. Code.

Jul 8, 2012 - how to software dev

Defaulting to Dvorak on Linux

This is (mostly) a Debian (or derivatives) specific guide to get the Dvorak keyboard layout across the system. Unfortunately, the power of a Unix is also sometimes its curse, in this case, at least as far as I know, there’s no central place to say “use Dvorak”, and have the system honour it. But broadly speaking, there are 3 input areas:

  1. Virtual Console
  2. Display Manager
  3. X session / Desktop Environment (DE)

A ‘modern’ DE like KDE or Gnome, will easily allow you to configure Dvorak through some GUI. I am documenting the case where it is DE-agnostic, and focuses on the X session starting in Dvorak to begin with. So unless there’s a DE override, this should work across all DEs.

Virtual Console

To use Dvorak on the virtual console, on the console issue loadkeys dvorak. This requires the various console keymaps installed. Under Debian, ensure the package console-data is installed; if you issue the command and get a file dvorak not found error or some such, you know you are missing the aforementioned package.

I have not been able to persist a Dvorak-by-default-console setting unfortunately. Will Google some more. There must be a nicer Debian Way, besides just issuing loadkeys directly in some init script. At a per user session, putting it in ~/.profile (or your shell’s equivalent) should work.

Display Manager

Important: This will start your display manager (e.g. GDM, LightDM, XDM) in Dvorak mode! For a shared computer you may not want this!

Edit /etc/default/keyboard, and set/replace XKBVARIANT=”dvorak”, here’s mine:

 1# !/bin/sh
 2# If you change any of the following variables and HAL and X are
 3# configured to use this file, then the changes will become visible to
 4# X only if HAL is restarted.  In Debian you need to run
 5# /etc/init.d/hal restart
 6
 7# The following variables describe your keyboard and can have the same
 8# values as the XkbModel, XkbLayout, XkbVariant and XkbOptions options
 9# in /etc/X11/xorg.conf.
10
11XKBMODEL="pc105"
12XKBLAYOUT="us"
13XKBVARIANT="dvorak" # was empty, set to "dvorak"
14XKBOPTIONS="compose:ralt" # set the Compose key, for accented characters, set to right alt.
15              # see http://duncanlock.net/blog/2013/05/03/how-to-set-your-compose-key-on-xfce-xubuntu-linux/
16
17# If you don't want to use the XKB layout on the console, you can
18# specify an alternative keymap.  Make sure it will be accessible
19# before /usr is mounted.
20# KMAP=/etc/console-setup/defkeymap.kmap.gz
21BACKSPACE="guess"

Note the comment on HAL, I missed it and simply restarted my machine to get it to reload, very lame.

X Session/Desktop Environment

To simply enable a per user X session to start with Dvorak, I set setxkbmap dvorak in ~/.xsessionrc before spawning the window manager. Here’s the full contents of ~/.xsessionrc file (for my own reference):

 1# see: http://productforums.google.com/forum/#!msg/chrome/t3vPnF_CTBE/UBba0Dp5w3AJ
 2nvidia-settings -a InitialPixmapPlacement=0
 3
 4# enable dvorak by default
 5setxkbmap dvorak
 6
 7# rotate portrait monitor output, use 'xrandr -q' to find out output names.
 8xrandr --output DVI-I-1 --rotate left
 9
10# compositing manager
11xcompmgr -c &
12
13# accented chars support
14xmodmap -e "keysym Alt_R = Multi_key"
15
16# Using xfce4-paneli (and thus all panel plugins) with openbox
17# openbox is a lighter wm compared to xfwm
18exec dbus-launch openbox-session

Note that you may have to configure your display manager to launch an appropriate X client script, I use Xsession with LightDM.

A slight digression: Many larger DEs do various magic to start-up, I really dislike this lack of transparency — I can see the value of it for absolute beginners of course, but you grow out of it pretty quickly once you come back to the Unix Way. To that effect, I modified LightDM — the display manager I use — to use Xsession. Here are my relevant changes to /etc/lightdm/lightdm.conf:

1session-wrapper=/etc/X11/Xsession

This will find a ~/.xsessionrc, and execute that post starting the X server. Note that my script is documented above, it’s nice having a central script to hook in everything you need to start your X session with, including the window manager itself.