Ubuntu – ny way to use QWERTY’s keyboard shortcut position while the Dvorak layout is active


I am a Dvorak layout user and I am happy with the switch.

I avoided the undo/cut/copy/paste shortcut disadvantage (the z,c,x and v are far apart on Dvorak layout) on Windows by using Microsoft's Keyboard layout creator to map control key combinations back to their QWERTY counterparts, but it's bugging me that I can't do the same on Ubuntu/Linux, even though it has a more advanced input framework.

dvorak-querty is supposed to accomplish this but doesn't work for me.

The comments on the bugs referred to by a previous similar question doesn't provide any viable workaround for this.

So is there anything I can do aside waiting (for years) for the bugs to be fixed, like writing a custom keyboard layout or ibus plugin?

Clarification (another way of putting my question)

Is there any way to use QWERTY's keyboard shortcut position while the Dvorak layout is active?

For example, to 'Copy', I have to press Ctrl+i (the position of the 'I' on QWERTY is 'C' on Dvorak, which is a awkward stretch), then for 'Paste', I have to press Ctrl+. (another awkward position). I want to press Ctrl+c and Ctrl+v.

Currently I'm using the old-style shortcuts I learned from the DOS-era, ShiftDel for cut and Ctrl+Insert for copy…

Best Answer

  • My first attempt was to make the control keys act simultaneously as Control and as a third-level chooser, then define a keyboard layout with Dvorak on levels 1 and 2, and Qwerty on levels 3 and 4. This doesn't seem possible in XKB, however. In addition, the comments in the source of the dvorak-qwerty program you've linked state that

    Although it is possible to define an XKB layout which implements Dvorak-Qwerty, doing so exposes a depressing number of bugs across the board in X apps. Since it is the responsibility of each X app to interpret the keyboard layout itself, rather than having the X server do the work, different GUI frameworks actually tend to have different bugs that kick in when using such a layout. Fixing them all would be infeasible.

    Your best bet is probably to get the dvorak-qwerty hack working. Most of what I'm about to write you probably know. The source says to compile it with

    gcc xdq.c -o xdq -std=c99 -O2 -lX11

    then run it with


    or give the absolute path so you can put it in your startup items.

    When I ran the program it gave me the following warning:

    Failed to grab 35 key combinations. This is probably because some hotkeys are already grabbed by the system. Unfortunately, these system-wide hotkeys cannot be automatically remapped by this tool. However, you can usually configure them manually.

    However, I tested it with ^W, ^Q, ^C, ^X, and ^V, and it worked as expected. If you want it to grab other modifiers (ALt+Ctrl and Super) the combinations the system is already using for other things, add -DXQD_GREEDY (not -DXDQ_GREEDY as the source says) to the compilation command.

    If it failed to compile with the error

    xdq.c:87:22: fatal error: X11/Xlib.h: No such file or directory compilation terminated.

    then you should install the package libx11-dev with

    sudo apt-get install libx11-dev

    If this doesn't get the program working, let me know and we can try to work it out.