GNU/Linux >> Linux の 問題 >  >> Linux

USBキーボードが接続されているときにキーボードレイアウトを自動ロードするudevルール

少しハックですが、これを回避する方法を見つけました。

今日、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 で作業できるようにしました:DISPLAYXAUTHORITYHOME 、および 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
    

    同じコマンドを再度実行して、必要に応じて有効にします。


    Linux
    1. USBデバイスが削除されたときにシェルスクリプトでイベントをトリガーする方法は?

    2. どのキーボードレイアウトでçと入力できますか?

    3. UDEV を使用して USB デバイスが接続または削除されたときにスクリプトを実行する方法

    1. Linux:キーボード レイアウトをオンザフライで変更する

    2. Xephyr キーボード レイアウト

    3. i3でキーボードレイアウトを変更するには?

    1. 4Linuxで接続されたUSBデバイス名を知るための便利な方法

    2. さまざまなディストリビューションでの言語とキーボードレイアウトの変更

    3. 複数ノードの USB デバイスに一致する Udev ルール