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


236

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

すなわち

またはに変更PgUpしたいのですが。HomePgDownEnd

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


ここで私の答えをチェックしてください。同じ答えをコピーして貼り付ける価値はありません。おそらくそれはあなたを助けるでしょう。
ラーフルヴィルパラ

1
ユニットステップのCTRL-P / Nに対するEmacsのようなバインディングはありますか?
レオレオポルトヘルツ준영

しばらく時間xmodmapがかかりますので!システム全体の設定を取得するには、使用する必要がありますxkb。そのため、言語ファイルを編集して、/usr/share/X11/xkb/symbols/そこに変更を追加します。参照してくださいaskubuntu.com/a/898462/34298
rubo77

回答:


249

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


特定のキーを再マッピングするには、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"
    

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

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

xmodmap -pke >~/.Xmodmap

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

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

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

ソース:Ubuntu Foruns

ボーナスもの:

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

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

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

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2ので、xmodmap -pmそれを教えてくれるmod2Num_Lock、他の名前はで、キーを押すことによって得られますxev


3
xevキャッチすることができませんFnキープレス
OM-NOM-NOM

3
Ubuntu 12.10でCaps-Lockキーを再マップすると、選択した答えは機能しませんでした。これを行うには、[システム設定]-> [キーボード]-> [レイアウト設定]-> [オプション]を選択します。これには、キーと代替動作のリストがあります。Unityとターミナルで問題なく動作しました。
アリルイソシアネート

1
複数のキーボードを接続している場合、これらのツールは別のキーボードの同じキーの違いを認識しますか?
stommestack

1
奇妙なことに、私はすべてをしましたが、再起動後もキーマッピングはリセットされます。
コスタ

1
-eventUbuntu 12.04にフラグがあるとは思わない。エラーをスローし、「イベント」に言及していませんman xev
同型

20

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モディファイヤに対するそれらのすべての最もunix-yの答え(EnterキーにControl_Rの機能を持たせたいが、詳細を忘れていたとき、iBook 2に戻ってすでにそうしていた)。
rbrito

2
Lenovoラップトップでキーボードを使用するユーザーにとって重要な答え
EinarÓlafsson17年

16

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

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

キーをバインドするには、2つの一般的な方法があります。

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

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

Firefoxkeyconfigというアドオンがあります...情報については、このMozillZineの投稿を参照してください

ほとんどのUbuntuプログラムはGnomeベースであり、これらのGnomeアプリのメニュー項目のキーバインドを変更するための特定のユーティリティがあります...それは呼ばれEditable Menu Acceleratorます...それは非常に「タッチ」ツールですが、非常に強力です。実行して、それgconf-editor(ターミナルか、Alt + F2経由で)...に移動desktop- gnome- interfaceと選択can_change_accelsあなたは、あなたが好きな仮想何にもメニュー項目を変更することができます....(プログラム/ウィンドウごと)...私はあなたが無効に示唆します必要なことを完了したらすぐに

それ以外の場合は、グローバルホットキーを設定できます。私はxbindkeys と呼ばれるプログラムを使用しxbindkeysをインストールするます。また、メインメニューの[設定]から選択できるオプションもあります。Keyboard Shortcuts

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


+1、とてもいい!提案:別の質問からの素晴らしい回答をこの質問に統合する必要があります。xbindkeysの構成形式についても少し説明してください。
ステファノパラッツォ

1
他のキーの割り当てに関するビットは、で処理できます。man xdotoolページをチェックして、この問題を解決するために使用しました。
ステファノパラッツォ

私は最近、xevと呼ばれるツールと組み合わせてxmodmapと呼ばれるツールを使用した別のアプローチを見つけました。私はxmodmapとxbindkeysの違いがわからないが、これは私にはかなりうまくいく。名前付きの2つを好むツールに関するアドバイスはありますか?ここではxmodmapをとxevの説明ステップガイドによって、非常に有用なステップであるubuntuforums.org/showpost.php?p=7675138&postcount=2は
NES

@NES ..間違った点に対処したようです。特定のキーがOSによって解釈される方法、つまり非標準のキーボード解釈を実際に再マップしたいようですが、標準のキーボード解釈、およびデフォルトのキー割り当ての単純なオーバーロード。(私はあなたが左と右のマウスボタンを交換するのに似ていると思います)..まあ私の答えは間違ったことに対して良かったようです:)
Peter.O

はい、でも問題ありません。答えも興味深いです。上記のリンクを掲載したステップバイステップガイドは正しい方法でした。だから私は他のユーザーが良いガイドを持っているという解決策で短い答えを投稿します。おかげフレッド
NES

9

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。図を移動します。


7

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

私の場合、-keyが壊れているため、Caps Lockキーをに再マップしたかったのです:)DD

まず、dumpkeys(1)を使用してマッピング用のテンプレートを取得しました。D-keyの場合、興味深いのはキーコード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...)

このリマップをデフォルトのマップに追加するには、コンソール設定用のリマップインクルードファイルに追加するだけです。

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

そしてコンソールセットアップは(と優先度の低い質問をスキップし、再構成する必要があります-phigh

sudo dpkg-reconfigure console-setup -phigh

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


3

私は丸1日を使ってショートカットを作成しようとしましたCtrl+Pageup

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

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

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

そして、の代わりにxmacroxvkbdプログラムを使用してキーボードイベントを生成しましたが、それは個人的な好みです。両方xmacroxvkbd動作はほぼ同じです。一つの追加のチップは、遅延パラメータを追加することであるxmacroxvkbdのイベントが迷子にしないように。


2

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

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

これは、セットアップするPERFEKT働いていたSuper+CSuper+VするCtrl+CとをCtrl+V。MacでVirtualBoxを介してUbuntuを使用する場合の完璧なソリューション
Ben

ただし、これらのショートカットをリッスンする他のコマンドは無効になりません。Super+V「通知リストの表示」を無効にするには、[設定]-> [デバイス]-> [キーボード]に移動し、そこで無効にします
Ben

@Ben yup、他のアプリのバインディングが表示されていれば素晴らしいと思いますが、むしろケーキに氷がかかっています。私の問題は、「Fn」キーを再マップできないことです。私はuhkキーボードを試してみることにしました-OSに関係なくプログラム可能なものは、それがどうなるかを見るでしょう。
エゴ

0

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

またはに変更PgUpしたいのですが。HomePgDownEnd

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

Enable=1
MapK112=K110
MapK117=K115
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.