GNU/Linux >> Znalost Linux >  >> Linux

pravidlo udev pro automatické načtení rozložení klávesnice, když je připojena USB klávesnice

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 .

  1. 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í.
  2. Ujistěte se, že jste klikli na your název klávesnice.
  3. Použijte lsusb abyste zjistili ID hardwaru, které musíte nastavit v pravidle udev. Moje klávesnice vypadá takto Bus 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.


Linux
  1. 4 Užitečný způsob, jak zjistit název připojeného zařízení USB v systému Linux

  2. Změna jazyka a rozložení klávesnice u různých distribucí

  3. Změnit rozložení klávesnice v Lightdm?

  1. Udev pravidlo, když je USB flash disk odpojen?

  2. Jak spustit událost ve skriptu Shell, když je odebráno zařízení USB?

  3. Vztah rozložení klávesnice a Xmodmap?

  1. Jak spustit skript při připojení nebo odpojení zařízení USB pomocí UDEV

  2. Použití pravidel udev ke spuštění skriptu při vložení USB

  3. Jak změnit rozložení klávesnice v i3?