少しハックですが、これを回避する方法を見つけました。
今日、udev、setxkbmap、および xinput --list を使用して 2 つのキーボードをセットアップし、それらが USB ホットプラグで動作するようにすることで、まったく同じポイントに到達しました。レイアウトを変更するのではなく、キーを交換していますが、すべて同じです。ホットプラグでキーボードを識別し、条件付きでsetxkbmapを呼び出すことができれば、指定したキーボードのみの言語を設定できるはずです.キーボード レイアウトのリストは、ここ ls -l /usr/share/kbd/keymaps/i386/
にあります。 xinput -list
でデバイス名を見つけることができます。 .
rizumu
を置き換えます。 明示的でなければこれを行う方法は不可能であることがわかったので、あなたのユーザー名を使用してください。 your
を grep してください。 キーボード名。lsusb
を使用 udev ルールで設定する必要があるハードウェア ID を検出します。私のdasキーボードはこのBus 002 Device 009: ID 04d9:2013 Holtek Semiconductor, Inc.
のように見えます まず、udev ルールを作成して、キーボードを自動検出するように udev ルールを設定します。
ファイル /etc/udev/rules.d/00-usb-keyboards.rules
内 :
ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2013", RUN+="/home/rizumu/bin/kbd_udev", OWNER="rizumu"
~/bin/kbd と ~/bin/kbd_udev の 2 つのファイルがあります。適切な権限 chmod 755 ~/bin/kbd*
があることを確認してください
~/bin/kbd_udev
スクリプトの内容:
#!/bin/bash
/home/rizumu/bin/kbd &
~/bin/kbd
を呼び出すだけであることがわかります。 バックグラウンドで、udev がプロセスを完了してキーボードを有効にできるようにします。 ~/bin/kbd
の内部 xinput を使用してデバイス ID を取得できるように、キーボードがアクティブになるまで待機する必要があるためです。これを実現するために、いくつかの変数を設定してエクスポートし、xinput setxkbmap で作業できるようにしました:DISPLAY
、 XAUTHORITY
、 HOME
、および 1 つの daskb_id
私のdaskeyboardのID:
#!/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
ディストリビューションによっては、既に /lib/udev/rules.d/64-xorg-xkb.rules にキーボード用の udev ルールがある場合があります。 Ubuntu では、これは /etc/default/keyboard をインポートします。これには、おおよそ次のようなオプションがあります:
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
私のセットアップでは、この組み込みルールがカスタム udev ルールの後に実行され、設定を上書きしていることに気付きました。代わりに、/etc/default/keyboard の XKBOPTIONS を次のように変更しました:
XKBOPTIONS="-option ctrl:nocaps"
すべてのキーボードで望んでいた "Caps Lock is Control" 動作を実現するため。
GNOME を実行している場合は、キーボード管理プラグインを無効にして、レイアウトの変更を上書きしないようにする必要があります。
gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active
同じコマンドを再度実行して、必要に応じて有効にします。