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, Shift–Del 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
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
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:
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
andSuper
) 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
then you should install the package
libx11-dev
withIf this doesn't get the program working, let me know and we can try to work it out.