Detect and setup Programmer Dvorak keyboard layout

This patch will add the keyboard layout identifier for the Programmer
Dvorak keyboard layout, so that if a Windows client has that layout
active, it will be mapped to the corresponding xkeyboard-config layout
in the X server.

An XFreeRDP client knows about this layout too, and will correspondingly
map it to the identifier given here, making the layout propagate
correctly through X-to-X connections as well.

To replicate the full Windows keyboard layout several options have to
be set as well as the main layout. To avoid having these options spill
over to other layouts that are dumped, the old settings are stored
before the dump and then restored afterwards.
This commit is contained in:
Roland Kaufmann 2020-06-14 02:59:20 +02:00
parent 76ac0600e4
commit a9eb5a17d2
4 changed files with 1058 additions and 1 deletions

View File

@ -15,6 +15,12 @@ setxkbmap -model pc104 -layout us
setxkbmap -model pc104 -layout dvorak setxkbmap -model pc104 -layout dvorak
./xrdp-genkeymap ../instfiles/km-00010409.ini ./xrdp-genkeymap ../instfiles/km-00010409.ini
# English - US 'dvp' 0x19360409
OLD_SETTINGS=$(setxkbmap -query -verbose 4 | sed "s/^\([a-z]\+\):\s*\(.*\)$/-\1 \2/;s/^-options/-option \"\" -option/;s/,/ -option /g" | xargs -d \\n)
setxkbmap -rules xfree86 -model pc105 -layout us -variant dvp -option "" -option compose:102 -option caps:shift -option numpad:sg -option numpad:shift3 -option keypad:hex -option keypad:atm -option kpdl:semi -option lv3:ralt_alt
./xrdp-genkeymap ../instfiles/km-19360409.ini
setxkbmap ${OLD_SETTINGS}
# English - UK 'en-GB' 0x00000809 # English - UK 'en-GB' 0x00000809
setxkbmap -model pc105 -layout gb setxkbmap -model pc105 -layout gb
./xrdp-genkeymap ../instfiles/km-00000809.ini ./xrdp-genkeymap ../instfiles/km-00000809.ini

View File

@ -50,7 +50,8 @@ dist_startscript_DATA = \
km-00000813.ini \ km-00000813.ini \
km-00000816.ini \ km-00000816.ini \
km-0000100c.ini \ km-0000100c.ini \
km-00010409.ini km-00010409.ini \
km-19360409.ini
# #
# platform specific files # platform specific files

1047
instfiles/km-19360409.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@ -59,6 +59,7 @@ layouts_map=default_layouts_map
[default_rdp_layouts] [default_rdp_layouts]
rdp_layout_us=0x00000409 rdp_layout_us=0x00000409
rdp_layout_us_dvorak=0x00010409 rdp_layout_us_dvorak=0x00010409
rdp_layout_us_dvp=0x19360409
rdp_layout_dk=0x00000406 rdp_layout_dk=0x00000406
rdp_layout_de=0x00000407 rdp_layout_de=0x00000407
rdp_layout_es=0x0000040A rdp_layout_es=0x0000040A
@ -85,6 +86,7 @@ rdp_layout_pt=0x00000816
[default_layouts_map] [default_layouts_map]
rdp_layout_us=us rdp_layout_us=us
rdp_layout_us_dvorak=dvorak rdp_layout_us_dvorak=dvorak
rdp_layout_us_dvp=us(dvp)
rdp_layout_dk=dk rdp_layout_dk=dk
rdp_layout_de=de rdp_layout_de=de
rdp_layout_es=es rdp_layout_es=es
@ -122,6 +124,7 @@ layouts_map=default_layouts_map
[rdp_layouts_map_mac] [rdp_layouts_map_mac]
rdp_layout_us=us rdp_layout_us=us
rdp_layout_us_dvorak=dvorak rdp_layout_us_dvorak=dvorak
rdp_layout_us_dvp=us(dvp)
rdp_layout_dk=dk rdp_layout_dk=dk
rdp_layout_de=de rdp_layout_de=de
rdp_layout_es=es rdp_layout_es=es