<esc>と<caps lock>を外付けキーボードでも持続する方法で交換する


8

以下を含む〜/ .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はUbuntu 13.04です。

justbrowsingのコメントを考えると、これはudevルールを書くことで達成できるようです-私はRUNオプションを使用する必要があると思います、そしてそれは/ dev / hidraw0または/ dev / hidraw1でトリガーされる必要があるデバイスですキーボードを接続したときに表示されます...しかし、私はまだコンセプトに頭を抱えようとしているので、udevで何をしているのかを知っている人からの助けをいただければ幸いです。


このためのudevルールの作成を検討ください。
2013

回答:


3

このコマンドは内にあるため~/.profile、ログインしたときに1回だけ実行されます。非常に洗練されていない解決策の1つは、~/.bashrc代わりにコマンドをに配置して、ターミナルを開くたびに実行されるようにすることです。

より良い解決策は、USBキーボードが挿入されたときudevに実行さ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. udevのようなXプログラムを使用すると複雑になります。xmodmapエクスポート$DISPLAY$XAUTHORITY。とにかく、私はそれをあなたの方法で動作させることができなかったので、私の解決策はkeymap代わりに使用します。まず、あなたがのためのキーコードを見つける必要がありますEscCaps 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逆も同様です。


よさそうです。明日か翌日に試してみます。私はこれを行うためのキーボードに依存しない方法を望んでいましたが、それは本当の必要性よりも「それはきちんとした」ものです
evilsoup 2013

@evilsoupより一般的なルールを作成udevadm info --export-dbし、いくつかのキーボードで試して、それらが共通して持っている帽子を確認できるはずです。多分ID_MODEL=USB_KeykoardまたはID_USB_DRIVER=usbhidそれでも、間違ったデバイスでルールがトリガーされる可能性があります。あなた次第。
terdon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.