私はubuntuで特定のキーを再マッピングする方法を探しています。
つまり.
変えたい PgUp に Home または PgDown に End。
Ubuntu/GNOMEにキーを再割り当てする組み込みコマンドまたはツールが存在しますか?
注意:2013年以降、Ubuntuおよびデリバティブはxmodmap
を使用せず、代わりにxkb
を使用します。詳細については、 this answer を参照してください。以下の回答は、現在のリリースには関係ありません。
特定のキーを再マッピングするには、2つのツールが必要です。最初の xev (コマンドラインツール)と2番目の xmodmap (コマンドラインツールも)。どちらも、余分にインストールすることなくUbuntuで利用できるはずです。
ターミナルウィンドウを起動し、xev
を実行します。これでアクティブになり、キーが押されるのを待ちます。次に、動作を変更するキーを押します。つまり PgUp。
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 115
とNext
-動作の名前です。
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 -pm
がmod2
がNum_Lock
であることを示しているため、他の名前はxev
のキーを押すことによって取得されます。
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
後から考え直したばかりです。「リマップ」ではまったく違うことを意味するかもしれませんが、答えはそのままにしておきます(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
....その後、メニュー項目を(プログラム/ウィンドウごとに)任意の仮想的なものに変更できます...必要なことを行ったらすぐに無効にすることをお勧めします。
それ以外の場合は、グローバルホットキーを設定できます。 xbindkeys 、およびメインメニューから利用可能なオプションもあります-Keyboard Shortcuts
と呼ばれる設定
Xbindkeysを使用する場合は、「スタートアップアプリケーション」(メインメニュー-環境設定)に追加する必要があります...また(Stefano Palazzoが提案するように)これに関する回答でxbindkeysのより詳細な説明を以前に書きました。 askubuntuページ
ここに私がマッピングを切り替えようとした方法があります 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 キー。図を移動します。
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
これで、再マップが完了し、ブート時に自動的にロードされるはずです。
私は丸1日、Ctrl+Pageup
のショートカットを作成しようとしました。
最初にxmodmap
を試しましたが、それは修飾子イベントを生成できません。したがって、たとえばControl
イベントを生成するショートカットを作成することはできません。
次に、xbindkeys
でxmacro
を試しました。この種の機能は動作しますが、xbindkeys
は、Alt + ___
など、システム上のいくつかのキーの組み合わせをキャプチャできません。
だから、ついにUnityのキーボードショートカット->カスタムショートカットを使ってショートカットをセットアップしました。
xmacro
の代わりに、xvkbd
プログラムを使用してキーボードイベントを生成しましたが、これは個人的な好みです。 xmacro
とxvkbd
はほぼ同じように機能します。もう1つのヒントは、xmacro
またはxvkbd
に遅延パラメーターを追加して、イベントが失われないようにすることです。
私にとっては、Software CenterのAutoKeyが最高の働きをしました。直感的なGUIがあり、新しいバインディングを追加するには、[新規]-> [フレーズ]をクリックし、
<left>
(特殊キーのリストは here です).特定のプログラムのキーのみを再マップする必要がある場合、 ちょうど追加 この機能をhax11に追加しました。
変えたい PgUp に Home または PgDown に End。
Hax11でこれを行うには、~/.config/hax11/profiles
(たとえば~/.config/hax11/profiles/usr\lib\firefox\firefox
)の下にあるプログラムのプロファイル構成ファイルを開き、以下を追加します。
Enable=1
MapK112=K110
MapK117=K115