有馬総一郎のブログ

(彼氏の事情)

2022年07月30日 21:44:23 JST - 3 minute read - Comments - Linux

Logitech MX Mechanical Miniに画面キャプチャ(PrintScreen"PrtSc")できるキーを追加する Linux編 その1

MX Mechanical Miniの特定のキーにPrintScreenを割り当てたい。 前回の記事 Windowsでは割とサクっと出来たが、Linuxでは上手く行かなかった。

キーボード -> ショートカットタブ で割り当てる

単にスクリーンショットをするためのショートカットを割り当てたいということであれば、大体は複数のショートカットの設定が可能となっているので、キーボード -> ショートカットタブ -> カテゴリ -> システム -> スクリーンショットと録画でショートカットのキーボード割り当てが出来るので、そこで割り当ててしまえば終了である。

ただ、それだと負けた?気がするので、Windows編と同様に音量増大<VOL+>キーをPrintScreen<PRSC>キーとして割り当てたい。

上記サイトを参考にして、キーの入れ替え自体は出来たのだけど、ショートカットとして割り当てられているGNOME スクリーンショットが起動しない。

キーコードを調べる

$ xmodmap -pk
There are 7 KeySyms per KeyCode; KeyCodes range from 8 to 255.

    KeyCode	Keysym (Keysym)	...
    Value  	Value   (Name) 	...
107    	0xff61 (Print)	0xff15 (Sys_Req)	0xff61 (Print)	0xff15 (Sys_Req)	
123    	0x1008ff13 (XF86AudioRaiseVolume)	0x0000 (NoSymbol)	0x1008ff13 (XF86AudioRaiseVolume)	
$ xmodmap -pke
keycode 107 = Print Sys_Req Print Sys_Req
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume

xmodmap -e "keycode 123 = XF86AudioRaiseVolume"とすると、キーボードの割り当てどではPrintと認識されているのだけど、Scrennshotなどが動作しない。

modifierキー

Kuriki’s HomePageのようにxmodmap -e "remove Lock = Caps_Lock"のような削除処理がいるのか?と思ったが、

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

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (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)

removeできるのはmodifierキーのみっぽい。

ラップトップのキーボードを無効化

そもそもラップトップのキーボードとLogitech MX Mechanical Miniと二つあるから、上手く行かないのか?と思って Is there a way to disable a laptop’s internal keyboard? - Ask Ubuntuを参考に

$ xinput list
    ↳ AT Translated Set 2 keyboard            	id=15	[slave  keyboard (3)]

xinput float 15無効化1してCinnamonを再起動させてみるけど、駄目。

コマンドで成功

xmodmap -e "keycode 107 = "
xmodmap -e "keycode 123 = Print Sys_Req Print Sys_Req"

とやることで成功した2

ログイン(起動)時に反映できない

じゃあ、上記コマンドを.profileに追記したり、自動で起動するアプケーション.desktopとしてxmodmap -e "keycode 107 = " -e "keycode 123 = Print Sys_Req Print Sys_Req"を実行させても反映されない…

次回へ続く


  1. 無効化コマンドはxinput float <id#>。有効化はxinput reattach <id#> <master#>。自分の環境だとxinput reattach 15 3 ↩︎

  2. 二行目のコマンドはxmodmap -e "keycode 123 = Print"でも大丈夫っぽい。戻すときはxmodmap -e "keycode 107 = Print Sys_Req Print Sys_Req" -e "keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume"↩︎