Ho trovato un modo per aggirare questo problema, anche se è un po' confuso.
Oggi sono arrivato allo stesso punto esatto nel tentativo di configurare due tastiere con udev, setxkbmap e xinput --list e farle funzionare con l'hotplugging USB. Sto scambiando i tasti, non cambiando il layout, ma è lo stesso, una volta che hai identificato la tua tastiera su un hotplug e puoi chiamare in modo condizionale setxkbmap, allora dovresti essere in grado di impostare la lingua solo della tastiera che hai specificato . L'elenco dei layout di tastiera può essere trovato qui ls -l /usr/share/kbd/keymaps/i386/
e puoi trovare il nome del tuo dispositivo in verde con xinput -list
.
- Ti consigliamo di sostituire
rizumu
con il tuo nome utente, poiché ho scoperto che non era possibile farlo senza essere espliciti. - Assicurati di afferrare il
your
nome della tastiera. - Usa
lsusb
per scoprire l'ID hardware che devi impostare nella regola udev. La mia tastiera das ha questo aspettoBus 002 Device 009: ID 04d9:2013 Holtek Semiconductor, Inc.
Per prima cosa ho impostato la regola udev per rilevare automaticamente la tastiera creando una regola udev:
Nel file /etc/udev/rules.d/00-usb-keyboards.rules
:
ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2013", RUN+="/home/rizumu/bin/kbd_udev", OWNER="rizumu"
Ho due file ~/bin/kbd e ~/bin/kbd_udev. Assicurati che abbiano i permessi corretti chmod 755 ~/bin/kbd*
L'~/bin/kbd_udev
lo script contiene:
#!/bin/bash
/home/rizumu/bin/kbd &
E noterai che tutto ciò che fa è chiamare ~/bin/kbd
in background, in modo che udev possa completare il suo processo e attivare la tastiera. All'interno del ~/bin/kbd
script dormiamo per un secondo, perché dobbiamo aspettare che la tastiera sia attivata in modo da poter ottenere l'id del dispositivo usando xinput. Per raggiungere questo obiettivo ho impostato alcune variabili e le ho esportate in modo che xinput setxkbmap possa fare il loro lavoro:DISPLAY
, XAUTHORITY
, HOME
e un daskb_id
per l'id della mia daskeyboard:
#!/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
A seconda della tua distribuzione, potresti già avere una regola udev per le tastiere in /lib/udev/rules.d/64-xorg-xkb.rules. Su Ubuntu, questo importa /etc/default/keyboard, che ha opzioni più o meno come questa:
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
Per la mia configurazione, ho scoperto che questa regola integrata veniva eseguita dopo la mia regola udev personalizzata e sovrascriveva le mie impostazioni. Invece ho cambiato XKBOPTIONS in /etc/default/keyboard in:
XKBOPTIONS="-option ctrl:nocaps"
Per ottenere il comportamento "Caps Lock is Control" che volevo su tutte le tastiere.
Se stai utilizzando GNOME, dovrai disabilitare il plug-in per la gestione della tastiera in modo che non sovrascriva le modifiche al layout.
gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active
Esegui di nuovo lo stesso comando per abilitarlo come desiderato.