次の内容を含む ~/.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キーボードに返された値を使用しているので、このソリューションを自分自身に合わせて編集する必要があります。)
USBキーボードの詳細を確認してください。キーボードが接続された状態で次のコマンドを実行します。
$ /lib/udev/findkeyboards | grep USB USB keyboard: input/event6
ルールを作成するには、
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
udev
Xプログラムを使用すると複雑になります。たとえば、xmodmap
。とにかく、私はあなたの方法で動作させることができなかったので、私のソリューションを使用しました。まず、キーコードを見つける必要があり、次のように実行することができます。$DISPLAY
$XAUTHORITY
keymap
EscCaps Locksudo /lib/udev/keymap -i input/event6
次に、対応するキーを押します。私のシステムでは、次のものが返されます。
scan code: 0x70029 key code: esc scan code: 0x70039 key code: capslock
次の行を含む新しいキーマッピングルールを作成します。
0x70029 capslock 0x70039 esc
そして別の名前で保存してください
/lib/udev/keymaps/speedswap
。新しい
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その逆に。