Wayland で起動時に NumLock の状態を切り替える

背景

私の使う Let's note は、ノート PC では珍しく NumLock があり、ON の状態だとキーの一部をテン・キーのように使える

これは数字を中心で入力したいときには便利だが、当然普段は OFF で使う

加えて私は自宅ではこれに外部モニター、外付けキーボード/マウスを接続して繋げる使い方をしていて、このキーボードには点・キーがついているので、普段は LumLock を ON でつかう

このような使い方をしていると次のようにしたい

  • 外付けキーボードが付いている時は NumLock を ON
  • 外付けキーボードが付いていない時は NumLock を OFF

そこで今まではログイン時にキーボ度の接続状態を調べて numlockx を使って切り替えていたが、これは X.org では有効だが Wayland で動作しない

今回少なくとも私の Ubuntu+Gnome の環境では対処法が見つかったのでその方法を示す

方法

まずデフォルトで NumLock の状態を保存され、次回ログイン時にそのまま使われるようになっているので、そのままにしておく

もし変更している場合次を実行

gsettings set org.gnome.desktop.peripherals.keyboard remember-numlock-state true

その上でこの NumLoxk の状態をログイン時に置き換えるという仕組み

具体定期には ~/.profile に次の記述を加えてやる

NUMLOCK=0 if command -v gsettings > /dev/null ; then # Gnome の設定 (dconf) org.gnome.desktop.peripherals.keyboard.numlock-state の値を USB/Bluetooth のキーボードが # 有れば true # 無ければ false for event in /dev/input/event*; do INFO=$(udevadm info --query=all --name="$event" 2>/dev/null) if grep -q '^E: ID_INPUT_KEYBOARD=1' <<-_EOF_ ; then $INFO _EOF_ if grep -q '^E: ID_BUS=usb' <<-_EOF_ ; then $INFO _EOF_ NUMLOCK=1 break elif grep -q '^E: ID_BUS=bluetooth' <<-_EOF_ ; then $INFO _EOF_ NUMLOCK=1 break fi fi done fi if [ $NUMLOCK -eq 1 ]; then gsettings set org.gnome.desktop.peripherals.keyboard numlock-state true else gsettings set org.gnome.desktop.peripherals.keyboard numlock-state false fi unset NUMLOCK

USB か Bluetooth で繋げられたキーボードが有れば NumLock ON、そうでなければ OFF になる