以下を含む〜/ .speedswapperというファイルがあります。
! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock
...実行するとxmodmap ~/.speedswapper
、これは esc そして Caps Lock キー。 〜/ .profileにこの行があるので、ログインするたびにこれらのキーが切り替えられます。
ただし、外付けUSBキーボードを接続すると、この設定が持続しないようです。私のラップトップのキーボードは完全に機能しますが、外部キーボードが2つのキーを切り替えるには、コマンドを再度実行する必要があります。幸いなことに、そうすることは私のラップトップのキーボードに影響を与えないようです-それらは同期しているようです。
1つの解決策は、外部キーボードが接続されているときはいつでもそのxmodmapコマンドを実行する方法を見つけることですが、より堅牢であれば、別のキーワッピングソリューションを利用できます。 OSはUbuntu13.04です。
Justbrowsingのコメントを考えると、これはudevルールを作成することで実現できるようです-RUNオプションを使用する必要があり、/ dev/hidraw0または/ dev/hidraw1でトリガーする必要があると思います。キーボードを接続すると表示されます...しかし、私はまだコンセプトに頭を悩ませようとしているので、udevで何をしているのかを知っている誰かの助けをいただければ幸いです。
このコマンドは~/.profile
にあるため、ログイン時に1回だけ実行されます。あまり洗練されていない解決策の1つは、代わりにコマンドを~/.bashrc
に配置することです。ターミナルを開くたびに実行します。
より良い解決策は、USBキーボードが挿入されたときにudev
を実行する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
は、xmodmap
のようなXプログラムを使用すると複雑になり、$DISPLAY
と$XAUTHORITY
をエクスポートするときにも機能させることができませんでした。とにかく、私はそれをあなたのメソッドで動作させることができなかったので、私のソリューションは代わりにkeymap
を使用します。まず、次のキーコードを見つける必要があります Esc そして Caps Lock、実行することでこれを行うことができます
Sudo /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 およびその逆。