2019-11-08

(Linux)キーボードを新調したら右Winキーがなかった

愛用していたキーボードが不調になったため、新しいキーボードに交換してみました。ところが、新しいキーボードには右側のWindowsキーがありませんでした。

机の上がせまいので、テンキーレスなキーボードを愛用していましたが、なぜか左側のCtrlキーだけが反応しなくなってしまいました。キートップを外して念入りに掃除してみたものの改善されず、しばらくこの状態でガマンしていました。

安くて良さげなテンキーレスキーボードを物色していたところ、たまたまFILCOの状態の良い中古品を発見できたので、勢いで買ってしまいました。

新調したのはFILCOの茶軸タイプで大変高級感があるのですが、安物キーボードに慣れた体にはまだしっくりきていません。キーを押すと「カシュン、カシュン」っていう感じで、個人的にはもうちょっと手応えがあっても良いです。




新しいキーボードを使い始めてから気づいたのですが、このキーボードには以前はあった右側のWindowsキーがなかったのです。

右側のWindowsキーはLinux MintでCinnamonのメニューを開いたり、画面ロックする時によく使っているキーで、個人的にかなり困ってしまいました。


そんな時のためにLinuxにはxmodmapというコマンドが用意されています。

今回はこのコマンドを利用して、メニューキーを右Windowsキーに論理的に差し替えてみることにします。


現在の制御キーの割り当て状況を確認してみます。

$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Eisu_toggle (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

「mod4」という部分がWindowsキーというかSuperキーの割り当て状況です。ちなみにメニューキーは「Menu」、左Windowsキーは「Super_L」、右Windowsキーは「Super_R」というキーシンボルとして定義されています。
Super_Lのキー番号は0x85なので133、Super_Rのキー番号は0x86なので134です。Menuは135でした。

メニューキーを押すと「135番が押された」という信号が発生するので、「135番は134番だよ」と再定義してあげるわけです。


xmodmap -e "keysym Menu = Super_R"


このコマンドで「メニューキー」=「右Windowsキー」だよ、と再定義します。コマンドを実行した瞬間に反映されます。

確かにこれでメニューキーを押してもメニュー(マウスの右クリックで出てくるメニューのことです)が出なくなったのですが、Linux MintのCinnamonメニューは開いてくれません。

試しにWindowsキー(実際はメニューキー) + Lキーを押すと画面ロックされ、Windowsキーとしては働いているようです。

個人的には画面ロックよりもCinnamonのメニューを開く方が使用頻度が高いため、xmodmapの設定は元に戻し、Cinnamonメニューの設定で回避することにしました。


以前は「Behaior」の「Keyboard shortcut to open and close the menu」に「Super_L」と「Super_R」を指定していましたが、ひとまず「Super_R」 の替わりに「Menu」を指定しています。

この設定画面上でも「Super_R」と認識はされるので、Cinnamonのバグではないかと思っていますが、もう少し足掻いてみることにします。