web-dev-qa-db-ja.com

特定のキーまたはデバイスを再マップするにはどうすればよいですか?

私はubuntuで特定のキーを再マッピングする方法を探しています。

つまり.

変えたい PgUp に Home または PgDown に End

Ubuntu/GNOMEにキーを再割り当てする組み込みコマンドまたはツールが存在しますか?

234
NES

注意:2013年以降、Ubuntuおよびデリバティブはxmodmapを使用せず、代わりにxkbを使用します。詳細については、 this answer を参照してください。以下の回答は、現在のリリースには関係ありません。


特定のキーを再マッピングするには、2つのツールが必要です。最初の xev (コマンドラインツール)と2番目の xmodmap (コマンドラインツールも)。どちらも、余分にインストールすることなくUbuntuで利用できるはずです。

  1. ターミナルウィンドウを起動し、xevを実行します。これでアクティブになり、キーが押されるのを待ちます。次に、動作を変更するキーを押します。つまり PgUp

  2. xevは、押されたキーに関する情報を出力します。 3行目は重要です。次のようになります。

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    この例では、Priorは現在キーが割り当てられている動作の名前です。数字のキーコードはキーを認識する内部IDです。これを別のキー、つまり PgDown この出力を与える

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    ここでも興味深い部分はkeycode 115Next-動作の名前です。

  3. 2つのキーを交換する場合は、xmodmapを使用します。

     xmodmap -e "keycode 110 = Next"
    

    これにより、キーボードのキーコード110のキーがアクションNextに変更されます。とても簡単です。

    マッピングしているキーが使用されるとき、異なる意味を持つべきであることに注意してください Shift キー(たとえば、英国のキーボードレイアウトの場合、 Shift+2 引用符を付けます)、2番目のコマンドを最初のコマンドの後に単にリストできます。たとえば、コード53のキーを通常のバックスラッシュにマッピングし、シフトで使用する場合はバーシンボルにマッピングする場合は、次のようにします。

     xmodmap -e "keycode 53 = backslash bar"
    

追加情報:これらのマッピングのシーケンスは Key、 Shift+Key、 mode_switch+Key、 mode_switch+Shift+Key、 AltGr+Key、 AltGr+Shift+Key。列をスキップするには、NoSymbolを使用します。さらに、 here はすべてのキーシムの包括的なリストです。

注:これらの変更はアクティブなXセッションのみに適用され、再起動後に失われます。変更を永続的に保存する場合は、上記のコマンドの後に次のコマンドを実行する必要があります:

xmodmap -pke >~/.Xmodmap

(ホームディレクトリ(.Xmodmap)に~という名前のファイルを作成します)

次に、コマンド.xinitrcを配置するホームディレクトリにxmodmap .Xmodmapという名前のファイルを作成する必要があります。

これで、.Xmodmapを変更し、コンソールからxmodmap .Xmodmapを実行して、変更をすぐに確認できます。 .Xmodmapの変更は保持されます。

ソース: buntu Foruns

ボーナスもの:

再マッピングするキーが状態に応じて異なる動作をする場合(数値キーボードのキーがNumLockにどのように依存するかなど)、単純に行う必要がありますxmodmap -pm修飾子のリストを取得してから:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

たとえば、数値キーボードのコンマの代わりにピリオドを取得したい場合(ほとんどのプログラマーに有用)、NumLockがオフの場合は「削除」動作を維持したい場合を想定します。

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2は、xmodmap -pmmod2Num_Lockであることを示しているため、他の名前はxevのキーを押すことによって取得されます。

248
NES

Shiftキーを移動しようとする場合、いくつかの追加手順があります。

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating
20
cmcginty

後から考え直したばかりです。「リマップ」ではまったく違うことを意味するかもしれませんが、答えはそのままにしておきます(1つのキーを再割り当てする方法がわかりません)別のふるまい)

UPDATE:私の「後付け」が確認されました。 (私は間違った質問に答えました:)... NESのコミュニティWikiの回答(上記で承認済み)をご覧ください。

次の2つの一般的な方法があります。 再マッピング キーを再バインドします。

  • 特定のプログラムに対してローカルに
    (キーは異なるアプリ/ウィンドウの異なるものに使用できます)
  • 特定のユーザーに対してグローバルに
    (キーはすべてのウィンドウで同じ機能を持ちます)

「プログラムのローカル」メソッドの場合、アプリ自体が提供するキーバインドを変更する方法が時々あります...

Firefoxには keyconfig というアドオンがあります...情報についてはこちらを参照してください MozillZine post

ほとんどのUbuntuプログラムはGnomeベースであり、これらのGnomeアプリのメニュー項目のキーバインドを変更する特定のユーティリティがあります...それはEditable Menu Acceleratorと呼ばれます...それは非常に「扱いにくい」ツールですが、非常に強力です.. gconf-editor(TerminalまたはAlt + F2経由)を実行して有効にできます... desktop--gnome--interfaceに移動し、can_change_accels ....その後、メニュー項目を(プログラム/ウィンドウごとに)任意の仮想的なものに変更できます...必要なことを行ったらすぐに無効にすることをお勧めします。

それ以外の場合は、グローバルホットキーを設定できます。 xbindkeysInstall xbindkeys 、およびメインメニューから利用可能なオプションもあります-Keyboard Shortcutsと呼ばれる設定

Xbindkeysを使用する場合は、「スタートアップアプリケーション」(メインメニュー-環境設定)に追加する必要があります...また(Stefano Palazzoが提案するように)これに関する回答でxbindkeysのより詳細な説明を以前に書きました。 askubuntuページ

16
Peter.O

ここに私がマッピングを切り替えようとした方法があります ENTER の鍵 SHIFT キー(およびその逆):

$ uname -a

報告書:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

報告書:

/usr/bin/xmodmap

$ which xev

報告書:

/usr/bin/xev

$ xev

(次の50行程度は無視してください)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

重要なのは、各キー押下の3行目です。

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

マッピングの反転:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

結果を保存します。

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

追加

 xmodmap ~/.Xmodmap

$ Sudo reboot

主な問題は、反転が機能しなかったことです。の ENTER キーはにマッピングされました SHIFT_R キー;しかし SHIFT_R キーはにマッピングされませんでした ENTER キー。図を移動します。

9
Bill Davis

Xとは独立してグローバルリマップを行うには、代わりにconsole-setup(5)を使用できます。

私の場合、私はリマップしたかった Caps Lock への鍵 D、以来 D-キーが壊れています:)

最初にdumpkeys(1)を使用して、マッピングのテンプレートを取得しました。 D-キー、興味深いビットは、キーコード32(私のキーボード上)のマッピングです。 grepパターンには2つのスペースがあることに注意してください!

$ Sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

適用するマップを変更するには Caps Lock (キーボードのキーコード58)代わりに

sed 's/32/58/' -i tempfile

今では

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

このリマップをデフォルトマップに追加するには、console-setupのリマップインクルードファイルに追加するだけです。

Sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

およびconsole-setupを再構成する必要があります(-phighで優先度の低い質問をスキップします)

Sudo dpkg-reconfigure console-setup -phigh

これで、再マップが完了し、ブート時に自動的にロードされるはずです。

7
arand

私は丸1日、Ctrl+Pageupのショートカットを作成しようとしました。

最初にxmodmapを試しましたが、それは修飾子イベントを生成できません。したがって、たとえばControlイベントを生成するショートカットを作成することはできません。

次に、xbindkeysxmacroを試しました。この種の機能は動作しますが、xbindkeysは、Alt + ___など、システム上のいくつかのキーの組み合わせをキャプチャできません。

だから、ついにUnityのキーボードショートカット->カスタムショートカットを使ってショートカットをセットアップしました。

xmacroの代わりに、xvkbdプログラムを使用してキーボードイベントを生成しましたが、これは個人的な好みです。 xmacroxvkbdはほぼ同じように機能します。もう1つのヒントは、xmacroまたはxvkbdに遅延パラメーターを追加して、イベントが失われないようにすることです。

3
HRJ

私にとっては、Software CenterのAutoKeyが最高の働きをしました。直感的なGUIがあり、新しいバインディングを追加するには、[新規]-> [フレーズ]をクリックし、

  1. 名前を追加し、[OK]をクリックします
  2. 「フレーズ設定」セクションで、使用するペーストがキーボードに設定されていることを確認します
  3. 使用するホットキーを追加します
  4. たとえば、左矢印キーをエミュレートするために、コマンドをテキストフィールドに追加します-<left>(特殊キーのリストは here です).
2
bruddha

特定のプログラムのキーのみを再マップする必要がある場合、 ちょうど追加 この機能をhax11に追加しました。

変えたい PgUp に Home または PgDown に End

Hax11でこれを行うには、~/.config/hax11/profiles(たとえば~/.config/hax11/profiles/usr\lib\firefox\firefox)の下にあるプログラムのプロファイル構成ファイルを開き、以下を追加します。

Enable=1
MapK112=K110
MapK117=K115
0