So I purchased a UniComp keyboard and instead of rearranging the keys to try Dvorak I decided I would have them configure the Dvorak layout for me… I was happy with Dvorak at first but I need my typing speed back. Unfortunately, they hard coded it to Dvorak (why they would do this I do not know, as now I cant customise it to any other layout), I need a way to map the Dvorak layout to Qwerty. Preferably this would be through a programmable USB dongle but I would settle for software side. If this I use software, I would need a program for both Windows and Debian that does the mapping.
Hardcoded Dvorak Keyboard to Qwerty
dvorakkeyboard
Related Solutions
It seems that someone having the same problem worked around it using a Windows compiled Autohotkey script. It's a portable application you can bring with you on a thumbdrive, and you should be able to just plug it in and start it up whenever you log on, even with restricted access.
However, there isn't a layout for programmer dvorak, so you would have to create your own. I think this involves text editing the included Colemac layout. Why it doesn't use a standard layout format is beyond me.
But if you do make your own Programmer Dvorak layout for that program, please upload it here. People to follow will be happy to avoid this annoying journey.
Update
I've solved our problem! After a couple hours struggling with the sparse documentation for the excellent portable keyboard layout, I managed to cobble together a programmer dvorak configuration file. The image isn't correct, but most importantly typing works perfectly, and everything is where you expect it to be.
Installation Instructions
Fairly simple.
Download PKL and put it on a flash drive.
Download this layout.ini file -- Note, I'm going to paste this at bottom of post, since I guess you can't upload files on this site?
Replace "Portable Keyboard Layout\layouts\colemak\layout.ini"
Start "Portable Keyboard Layout\pkl.exe" whenever you want to use Programmer Dvorak.
For the interested, I used the Microsoft Keyboard Layout Creator 1.4 and a klc2ini perl script (converts output of MSKLC to a format usable by PKL).
layout.ini file -- just paste this into the colemak layout.ini file, replacing everything in it.
Note: I'm not sure what the deadkey section is; the script produced a bunch of errors. But it works, so I'm not poking it.
EDIT: I've hosted the file here, as I've had trouble with copying the below text. Might be some StackOverflow formatting thing.
;
; Keyboard Layout definition for
; Portable Keyboard Layout
; http://pkl.sourceforge.net
;
[informations]
layoutname = United States-Dvorak-Programmer
layoutcode = DvrkProg
localeid = 00000409
copyright = Public Domain
company = Free
homepage = http://pkl.sourceforge.net/
version = 1.0
generated_from = DvrkProg.klc
modified_after_generate = no
[global]
; extend_key = CapsLock
shiftstates = 0:1:2
img_width = 296
img_height = 102
[fingers]
row1 = 1123445567888
row2 = 1123445567888
row3 = 1123445567888
row4 = 11234455678
[layout]
;scan = VK CapStat 0Norm 1Sh 2Ctrl Caps CapsSh
SC002 = 1 0 & % -- ; QWERTY 1!
SC003 = 2 0 [ 7 -- ; QWERTY 2@
SC004 = 3 0 { 5 -- ; QWERTY 3#
SC005 = 4 0 } 3 -- ; QWERTY 4$
SC006 = 5 0 ( 1 -- ; QWERTY 5%
SC007 = 6 0 = 9 -- ; QWERTY 6^
SC008 = 7 0 * 0 -- ; QWERTY 7&
SC009 = 8 0 ) 2 -- ; QWERTY 8*
SC00a = 9 0 + 4 -- ; QWERTY 9(
SC00b = 0 0 ] 6 -- ; QWERTY 0)
SC00c = OEM_4 0 ! 8 -- ; QWERTY -_
SC00d = OEM_6 0 # ` -- ; QWERTY =+
SC010 = OEM_7 0 ; : -- ; QWERTY qQ
SC011 = OEM_COMMA 0 , < -- ; QWERTY wW
SC012 = OEM_PERIOD 0 . > -- ; QWERTY eE
SC013 = P 1 p P -- ; QWERTY rR
SC014 = Y 1 y Y -- ; QWERTY tT
SC015 = F 1 f F -- ; QWERTY yY
SC016 = G 1 g G -- ; QWERTY uU
SC017 = C 1 c C -- ; QWERTY iI
SC018 = R 1 r R -- ; QWERTY oO
SC019 = L 1 l L -- ; QWERTY pP
SC01a = OEM_2 0 / ? -- ; QWERTY [{
SC01b = OEM_PLUS 0 @ ^ -- ; QWERTY ]}
SC01e = A 1 a A -- ; QWERTY aA
SC01f = O 1 o O -- ; QWERTY sS
SC020 = E 1 e E -- ; QWERTY dD
SC021 = U 1 u U -- ; QWERTY fF
SC022 = I 1 i I -- ; QWERTY gG
SC023 = D 1 d D -- ; QWERTY hH
SC024 = H 1 h H -- ; QWERTY jJ
SC025 = T 1 t T -- ; QWERTY kK
SC026 = N 1 n N -- ; QWERTY lL
SC027 = S 1 s S -- ; QWERTY ;:
SC028 = OEM_MINUS 0 - _ -- ; QWERTY '"
SC029 = OEM_3 0 $ ~ -- ; QWERTY `~
SC02b = OEM_5 0 \ | -- ; QWERTY \|
SC02c = OEM_1 0 ' " -- ; QWERTY zZ
SC02d = Q 1 q Q -- ; QWERTY xX
SC02e = J 1 j J -- ; QWERTY cC
SC02f = K 1 k K -- ; QWERTY vV
SC030 = X 1 x X -- ; QWERTY bB
SC031 = B 1 b B -- ; QWERTY nN
SC032 = M 1 m M -- ; QWERTY mM
SC033 = W 1 w W -- ; QWERTY ,<
SC034 = V 1 v V -- ; QWERTY .>
SC035 = Z 1 z Z -- ; QWERTY /?
SC039 = SPACE 0 ={Space} ={Space} ={Space} ; QWERTY Space
SC056 = OEM_102 0 \ | ; QWERTY OEM_102
SC053 = DECIMAL 0 . . -- ; QWERTY Decimal in Numpad
[deadkey1]
0 = 0 ;
1 = 14 ; ->
14 = 2988 ; ->
15 = 0 ; ->
28 = 14 ; ->
29 = 12 ; ->
42 = 0 ; * ->
54 = 0 ; 6 ->
55 = 0 ; 7 ->
56 = 10 ; 8 ->
57 = 0 ; 9 ->
58 = 0 ; : ->
59 = 241 ; ; -> ñ
60 = 242 ; < -> ò
61 = 243 ; = -> ó
62 = 244 ; > -> ô
63 = 245 ; ? -> õ
64 = 246 ; @ -> ö
65 = 247 ; A -> ÷
66 = 248 ; B -> ø
67 = 249 ; C -> ù
68 = 3856 ; D -> ༐
69 = 0 ; E ->
70 = 0 ; F ->
71 = 0 ; G ->
72 = 0 ; H ->
73 = 0 ; I ->
74 = 0 ; J ->
75 = 0 ; K ->
76 = 0 ; L ->
77 = 0 ; M ->
78 = 0 ; N ->
79 = 0 ; O ->
80 = 0 ; P ->
81 = 0 ; Q ->
82 = 0 ; R ->
83 = 0 ; S ->
84 = 0 ; T ->
87 = 3857 ; W -> ༑
88 = 3858 ; X -> ༒
124 = 3859 ; | -> ༓
125 = 3860 ; } -> ༔
126 = 3861 ; ~ -> ༕
127 = 3862 ; -> ༖
128 = 3863 ; -> ༗
129 = 3864 ; -> ༘
130 = 3865 ; -> ༙
131 = 3872 ; -> ༠
132 = 3873 ; -> ༡
133 = 3874 ; -> ༢
134 = 3875 ; -> ༣
135 = 3876 ; -> ༤
The keyboard layout is contained in the registry key HKEY_CURRENT_USER\Keyboard Layout
.
The REG_SZ item "1" contains the first layout, "2" the second, etc.
The article Windows Keyboard Layout lists most keyboards ids.
You would also find your above layout ids defined as sub-keys of the registry key
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\keyboard layouts
.
Analyzing your registry info :
Preload
determines which keyboard layouts are present in the keyboard switch button (on the bottom right of the taskbar), and the number determines the ordering. You have two of them : d0010409=Dvorak English and 00000409=US English.
This list order does not mean much more than that.
Substitutes
maps the value d0010409 to the layout 10409 which is also Dvorak. I assume that the changing of the upper half of the key code isn’t significant and is properly mapped by the substitutions hive.
What is missing is perhaps the substitution that maps 00000409 (US) to 00010409 (Dvorak). This can be done by entering it manually, or by the command :
reg add "HKCU\Keyboard Layout\Substitutes" /v 00000409 /d 00010409
When changing the registry take all due precautions : Create first a system restore point and also export the entire registry key.
Best Answer
If you're not afraid of opening the keyboard, you might look inside for a jumper or solder-short which chooses dvorak or qwerty layout.
At least that's what I'd look for.
Their prices are pretty low for a buckling spring keyboard, so I'd hazard a guess that the firmware of the keyboard is a jumper or short on the pc-board inside. Remember everyone wants 'least expensive', so making the firmware flip between two mapping tables would be my guess.
You'd have to pop off all the relevant keys and rearrange them, this is Fun! Especially if you can engage a young child to do the keycap replacements. (I had to pay an outrageous cookie fee though)