交換そして外部キーボードと同じ

交換そして外部キーボードと同じ

次の内容を含む ~/.speedswapper というファイルがあります。

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

...実行すると、キーがxmodmap ~/.speedswapper切り替わります。ログインするたびにこのキーが切り替えられるように、 ~/.profile に次の行があります。escCaps Lock

しかし、、外部USBキーボードを接続してもこの設定が維持されないようです。私のラップトップのキーボードは正しく動作しますが、外部キーボードが2つのキーを切り替えるようにするには、コマンドを再実行する必要があります。幸いなことに、これは私のラップトップのキーボードには影響しないようです。同期されているようです。

1つの解決策は、外部キーボードが接続されているときにxmodmapコマンドを実行する方法を見つけることですが、より強力な場合は他のキー交換ソリューションを使用することもできます。オペレーティングシステムはUbuntu 13.04です。

justbrowsingのコメントを見ると、udevルールを作成してこれを達成できるようです。 RUNオプションを使用し、キーボードを接続するときにデバイスが表示される/ dev / hidraw0または/ dev / hidraw1でトリガーする必要があります。 .. . しかし、まだ概念を理解しようとしているので、udevで何をしているのかご存知の方の助けをいただきありがとうございます。

答え1

にこのコマンドがあるため、~/.profileログイン時に一度だけ実行されます。あまりエレガントな解決策は、~/.bashrc端末を開くたびにコマンドが実行されるようにコマンドを配置することです。

udevより良い解決策は、USBキーボードが接続されたときに実行されるルールを定義することです。xmodmap(私はUSBキーボードに返された値を使用しているので、このソリューションを自分自身に合わせて編集する必要があります。)

  1. USBキーボードの詳細を確認してください。キーボードが接続された状態で次のコマンドを実行します。

    $ /lib/udev/findkeyboards | grep USB
    USB keyboard: input/event6
    
  2. ルールを作成するには、udevルールがどのように一致するかを知る必要があります。次のようにアイテムの出力を検索するか、直接解析してudevadm info --export-dbこの情報を取得できます。event6

    udevadm info --export-db | perl -ne 'BEGIN{$/="\n\n"}print if /event6/'
    

    これにより、使用するテキストを含む複数行のテキストが返されます。

    E: ID_MODEL_ID=0002
    [...]
    E: ID_VENDOR_ID=1c4f
    
  3. udevXプログラムを使用すると複雑になります。たとえば、xmodmap。とにかく、私はあなたの方法で動作させることができなかったので、私のソリューションを使用しました。まず、キーコードを見つける必要があり、次のように実行することができます。$DISPLAY$XAUTHORITYkeymapEscCaps Lock

    sudo /lib/udev/keymap -i input/event6
    

    次に、対応するキーを押します。私のシステムでは、次のものが返されます。

    scan code: 0x70029   key code: esc
    scan code: 0x70039   key code: capslock
    
  4. 次の行を含む新しいキーマッピングルールを作成します。

    0x70029 capslock
    0x70039 esc
    

    そして別の名前で保存してください/lib/udev/keymaps/speedswap

  5. 新しいudevルールを定義します。というファイルを作成し、/etc/udev/rules.d/95-speedswap.rules次の行を追加します。

    ACTION=="add", 
    SUBSYSTEM=="input", 
    ATTRS{idVendor}=="1c4f", 
    ATTRS{idProduct}=="0002", 
    RUN+="keymap $name speedswap"
    

少なくとも私のシステムでは動作するはずです。外部USBを接続すると、次のEsc動作が発生します。Caps Lockその逆に

関連情報