Našel jsem způsob, jak to obejít, i když je to trochu složité.
Dnes jsem se dostal přesně ke stejnému bodu, když jsem se pokusil nastavit dvě klávesnice s udev, setxkbmap a xinput --list a aby fungovaly s usb hotplugging. Prohazuji klávesy, neměním rozložení, ale je to stejné, jakmile identifikujete klávesnici na hotplug a můžete podmíněně volat setxkbmap, pak byste měli být schopni nastavit jazyk pouze klávesnice, kterou jste zadali . Seznam rozložení klávesnice naleznete zde ls -l /usr/share/kbd/keymaps/i386/
a název svého zařízení můžete najít pomocí xinput -list
.
- Budete chtít nahradit
rizumu
s vaším uživatelským jménem, jak jsem zjistil, že to není možné, aniž by to bylo explicitní. - Ujistěte se, že jste klikli na
your
název klávesnice. - Použijte
lsusb
abyste zjistili ID hardwaru, které musíte nastavit v pravidle udev. Moje klávesnice vypadá taktoBus 002 Device 009: ID 04d9:2013 Holtek Semiconductor, Inc.
Nejprve jsem nastavil pravidlo udev pro automatickou detekci klávesnice vytvořením pravidla udev:
V souboru /etc/udev/rules.d/00-usb-keyboards.rules
:
ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2013", RUN+="/home/rizumu/bin/kbd_udev", OWNER="rizumu"
Mám dva soubory ~/bin/kbd a ~/bin/kbd_udev. Ujistěte se, že mají správná oprávnění chmod 755 ~/bin/kbd*
~/bin/kbd_udev
skript obsahuje:
#!/bin/bash
/home/rizumu/bin/kbd &
A všimnete si, že vše, co dělá, je volání ~/bin/kbd
na pozadí, aby udev mohl dokončit svůj proces a aktivovat klávesnici. Uvnitř ~/bin/kbd
skript na sekundu spíme, protože musíme počkat, až se aktivuje klávesnice, abychom mohli získat ID zařízení pomocí xinput. Abych toho dosáhl, nastavil jsem některé proměnné a exportoval je, takže xinput setxkbmap může dělat svou práci:DISPLAY
, XAUTHORITY
, HOME
a jeden daskb_id
pro ID mého panelu:
#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/rizumu/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
daskb_id=`xinput -list | grep -i 'daskeyboard' | grep -o id=[0-9]. | grep -o [0-9]. | head -1`
xset r rate 200 30
setxkbmap -layout colemak
setxkbmap -option ctrl:nocaps
if [ "${daskb_id}" ]; then
setxkbmap -device "${daskb_id}" -option altwin:swap_lalt_lwin
fi
V závislosti na vaší distribuci již můžete mít pravidlo udev pro klávesnice v /lib/udev/rules.d/64-xorg-xkb.rules. Na Ubuntu to importuje /etc/default/keyboard, který má zhruba tyto možnosti:
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
Při mém nastavení jsem zjistil, že toto vestavěné pravidlo se spouští po mém vlastním pravidle udev a přepisuje má nastavení. Místo toho jsem změnil XKBOPTIONS v /etc/default/keyboard na:
XKBOPTIONS="-option ctrl:nocaps"
Chcete-li získat chování „Caps Lock is Control“, které jsem chtěl na všech klávesnicích.
Pokud používáte GNOME, budete muset zakázat jeho plugin pro správu klávesnice, aby nepřepsal vaše změny rozložení.
gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active
Spusťte stejný příkaz znovu, abyste jej aktivovali podle potřeby.