背景
私の使う 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 になる