クリックロック

  • ノート PC のタッチパッドで操作をしているときに、ドラッグの範囲が広すぎて、タップ操作だけで範囲を選択できない場合の対処方法を紹介する。
  • クリックロックを使うと上記問題は解決できる。
  • クリックロックとは、ドラッグ状態を保持する設定であり、Windows にも一応存在する。
  • クリックロック時のドラッグ操作
    1. ダブルタップして、2 回目のタップ後に手を離さず移動する。→ ドラッグ状態になる。
      • 移動量は少しで良い。
    2. 指を移動させ、ドラッグによる選択範囲を調整する。
      • クリックロック状態の場合、指を離してもドラッグ状態は解除されない。
    3. 選択範囲を確定するために、タップする。→ ドラッグ状態が解除される。
  1. 端末を起動させる。
  2. 必要パッケージ (xserver-xorg-input-synaptics) をインストールする。
    $ sudo apt install xserver-xorg-input-synaptics
  3. xinput で Touchpad デバイスを探し、デバイス ID を見つける。
    $ xinput list | grep "TouchPad"
    ⎜   ↳ SynPS/2 Synaptics TouchPad              	id=12	[slave  pointer  (2)]
    • この場合、id は 12 で、マシンによって異なる。
  4. タッチパッドデバイス設定情報から設定 ID を見つける。
    $ xinput list-props 12 | grep "Locked Drags"
    	Synaptics Locked Drags (298):	1
    	Synaptics Locked Drags Timeout (299):	5000
    • 12: デバイス ID
    • Synaptics Locked Drags (298): クリックロックが有効かのフラグ
      • 1 なので有効になっている。
      • 299 は、設定 ID でマシンによって異なる。
    • Synaptics Locked Drags Timeout (299) クリックロックの有効時間 (ms)
      • 5000 なので、5000ミリ秒 = 5 秒に設定されている。
      • 299 は、設定 ID でマシンによって異なる。
      • クリックロックでドラッグ状態にすると指を離すことができるが、この有効時間を過ぎるとドラッグは解除されたものとみなされ、クリックロック状態でなくなる。
  5. クリックロックを設定する (上記の例では既に設定されているが、有効時間を 1 分に設定してみる)。
    $ xinput set-prop 12 298 1
    $ xinput set-prop 12 299 60000
    • 12: デバイス ID
    • 298: クリックロック有効フラグの設定 ID
    • 299: クリックロック有効時間の設定 ID
  • この設定はマシンを終了すると消えてしまうので、起動スクリプトなどにしておくと良い。
clicklock.sh
#!/bin/bash
 
if [ ! "$(which syndaemon)" ]; then
	echo "ERROR: xserver-xorg-input-synaptics is not installed" >&2
	zenity --error --width 300 --title "StartUpConfig" --text "xserver-xorg-input-synaptics is not installed"
	exit 1
fi
 
# disable tapping while typing
#syndaemon -i 1.0 -K -R -t -d
 
# ===== clicklock ===== #
# Synaptics
dev_id=$(xinput list | grep -i "Synaptics" | grep -i 'Touchpad' | egrep -o 'id=[0-9]+' | egrep -o '[0-9]+')
lock_id=$(xinput list-props ${dev_id} | egrep 'Locked Drags \(' | egrep -o '\([0-9]+\)' | egrep -o '[0-9]+')
time_id=$(xinput list-props 14 | egrep 'Locked Drags Timeout' | egrep -o '\([0-9]+\)' | egrep -o '[0-9]+')
xinput set-prop ${dev_id} ${lock_id} 1
xinput set-prop ${dev_id} ${time_id} 60000
 
# DELL
dev_id=$(xinput list | grep -i "DELL" | grep -i 'Touchpad' | egrep -o 'id=[0-9]+' | egrep -o '[0-9]+')
lock_id=$(xinput list-props ${dev_id} | egrep 'Locked Drags \(' | egrep -o '\([0-9]+\)' | egrep -o '[0-9]+')
time_id=$(xinput list-props 14 | egrep 'Locked Drags Timeout' | egrep -o '\([0-9]+\)' | egrep -o '[0-9]+')
xinput set-prop ${dev_id} ${lock_id} 1
xinput set-prop ${dev_id} ${time_id} 60000