経緯
現在ノートパソコンにLinux Mintを入れていて、それで作業を行うことが多い。
ただ今まで利用していたPCがThinkpad X220 であり、古くなってきたこともあってかここ最近調子が悪いことが多くなった。
そのため新しくThinkpad T480に移行することにしたが、従来のX220の7段キーボードにあった、アプリケーションキーが、新しいT480にはない。
個人的に1つのキーでコンテキストメニューを呼び出せるアプリケーションキーがとても便利で利用することが多いため、なんとかT480でも同じことが出来るようにしたかった。
環境
・Thinkpad T480 (日本語キーボード)
・Linux Mint 20.3 Una
参考サイト
・Linux MintでSuperキーを無変換キーに割り当て
・キーボードマッピングの仕組み
・XmodMap
・Ubuntu documentation キーボード
要約
以下のファイルを作成、再読込を行うことで
普段あまり使わない右シフトキーを、アプリケーションキー(LinuxではMenuキーというのか?)として利用できるようになった。
■.Xmodmap
keycode 62 = Menu
keycode 62 は右シフトキー 、機種によって違うのかは不明(参考サイトを見る限り、違いそうな気はする)
■作成した.Xmodmapの読み込み
$ xmodmap .Xmodmap
設定手順
■1.キーコードの確認
一先ず参考サイトを参照し、キーコード一覧を見てみる
$ xmodmap -pke
keycode 8 =
keycode 9 = Escape NoSymbol Escape
keycode 10 = 1 exclam 1 exclam
keycode 11 = 2 quotedbl 2 quotedbl
keycode 12 = 3 numbersign 3 numbersign
keycode 13 = 4 dollar 4 dollar
keycode 14 = 5 percent 5 percent
keycode 15 = 6 ampersand 6 ampersand
keycode 16 = 7 apostrophe 7 apostrophe
keycode 17 = 8 parenleft 8 parenleft
keycode 18 = 9 parenright 9 parenright
keycode 19 = 0 asciitilde 0 asciitilde
keycode 20 = minus equal minus equal
keycode 21 = asciicircum asciitilde asciicircum asciitilde
keycode 22 = BackSpace BackSpace BackSpace BackSpace
keycode 23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
うーん、一覧を見てもピンと来ない、、、
なのでxevから該当キーのコードを探す。なおT480にアプリケーションキーは無いため、別途キーボードを繋いで確認した。
$ xev
表示されたウィンドウの黒枠にカーソルを合わせ、該当キーを押す。
●右シフトキーを押したとき
KeyPress event, serial 37, synthetic NO, window 0x5a00001,
root 0x7b8, subw 0x5a00002, time 5646504, (39,54), root:(2830,522),
state 0x10, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x5a00001,
root 0x7b8, subw 0x5a00002, time 5646646, (39,54), root:(2830,522),
state 0x11, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
よくわからんが “keycode 62” と表示されているので、62なのだろう・・・
同じようにアプリケーションキーを押してみる。
●アプリケーションキーを押したとき
KeyPress event, serial 37, synthetic NO, window 0x5a00001,
root 0x7b8, subw 0x5a00002, time 5761550, (25,46), root:(2816,514),
state 0x10, keycode 135 (keysym 0xff67, Menu), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x5a00001,
root 0x7b8, subw 0x5a00002, time 5761712, (25,46), root:(2816,514),
state 0x10, keycode 135 (keysym 0xff67, Menu), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
こちらはkey codeが135らしく、keysym 0xff67 , Menu となっている。
■2.設定ファイルの作成
上記でそれぞれのkey code が分かったので、設定ファイルを作成。
記載方法については、参考サイトのxmodmapコマンドを見たところ
keycode NUMBER = KEYSYMNAME
で、指定するみたい。
keysym と言うのがよく分かっていなかったが、参考サイトをみたところ
X window system 上では、そのボタンが押されたさいの役割を定義しているようなものをkeysymというらしく、
物理配置上のkey codeに、このkeysymを関連付けることで、動作するもののようだ・・・
(初めて知った、こんな仕組みになっていたのね)
なので.xmodmapのファイルに記載するkeysymについては、前項のxevより得られた結果より、
以下のように記載した
●.Xmodmap
keycode 62 = Menu
■3.設定の適用
作成したファイルを適用する
$ xmodmap .Xmodmap
適用後、右シフトキーを押して見る。
・・・
アプリケーションキーと同様にキー押下でコンテキストメニューが表示されることが確認出来た。
もともとThinkpadの7段キーボードが使いやすく感じており、アイソレーションキーで アプリケーションキーが無い最近のThinkpadへの移行をためらっていたが、これで少しは使いやすくなったかな・・・
でも未だプリントスクリーン キーがなんでこんなところにあるの?ホーム・エンドキーが打ちにくいなぁ、などと思うことも多いが・・・慣れの問題なのだろうか?
7段キーボードが復活してほしい・・・