Chromebookのタッチパッドの右下を右クリックボタンにする（gesture_prop）

# 概要
Chromebookに搭載されているタッチパッドには右クリックボタンが無く、2本指クリック(タップ)が右クリックになっています。
ランチャーキー＋1本指クリック(タップ)またはAltキー＋1本指クリック(タップ)でも右クリックできます。
しかし、修飾キー無しでタッチパッドを1本指クリック(タップ)して右クリックすることはできません。

ChromeOSには[Gesture Properties](https://chromium.googlesource.com/chromiumos/platform/gestures/+/HEAD/docs/gesture_properties.md)という機能があります。
Gesture Propertiesの`gesture_prop`コマンドを使ってタッチパッドの感度や範囲等のパラメータを調節することができます。
変更できるパラメータの中には1本指クリックで右クリックできるようにする機能の項目があり、croshにて`gesture_prop`コマンドを実行することでその機能を有効化することができます。
変更したパラメータはOS再起動すると元に戻ってしまうため都度croshにてコマンドを再実行する必要があり実用性は低めですが、方法を記事にします。

※試験的機能を使用するためデータ等が失われる可能性がありますので自己責任でお願いします。



# 準備
croshにて`gesture_prop`コマンドを使用できるようにするために下記フラグを有効化します。
`chrome://flags/#gesture-properties-dbus-service`

![Screenshot 2024-11-03 17.16.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/afd5ed94-5b3e-4cc0-2e89-cd1f57fa0d1a.png)

「Enable gesture properties D-Bus service」をEnabledに変更し再起動後、`Ctrl+Alt+T`にてcroshを開くと`gesture_prop`コマンドが使用可能になっています。



# タッチパッドのID確認

パラメータ変更のためにタッチパッドのIDを確認する必要があるため、
下記コマンドにてタッチパッドのIDを取得します。
```
gesture_prop devices
```
![Screenshot 2024-11-03 17.17.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/bd7d354a-496b-751e-479f-e73ac9192b0a.png)
int32の行にある数値がIDになります（テスト機では「9」がID）。



# 1本指クリックで右クリックできるようにする
変更できるパラメータのリストを下記コマンドで取得します。
```
gesture_prop list [ID]
```
![Screenshot 2024-11-03 17.21.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/23c8ff86-04e9-3a01-2524-249c48429308.png)
スクロールすると「`string "Button Right Click Zone Enable"`」という行が見つかると思います。

このパラメータの現在の設定値を下記コマンドで確認します。
```
gesture_prop get [ID] "Button Right Click Zone Enable"
```
![Screenshot 2024-11-03 17.28.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/44d49db5-57e4-5a76-2230-d604e297d9ad.png)
`variant array`の中の値が`boolean false`となっているので無効状態です。
これを下記コマンドで`true`に変更します。
```
gesture_prop set [ID] "Button Right Click Zone Enable" array:boolean:true
```
![Screenshot 2024-11-03 20.45.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/50c41f21-52af-9ebd-870a-e620e80df7de.png)
これでタッチパッドの右下を1本指クリックすると右クリックが実行される状態になりました。



# 右クリック範囲の調整
テスト機では右下の狭い範囲しか右クリックになりませんが、この範囲も同様に変更できます。
まずパラメータの現在の設定値を下記コマンドで確認します。
```
gesture_prop get [ID] "Button Right Click Zone Size"
```
![Screenshot 2024-11-03 17.31.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/5ff7a886-973e-23f3-2c53-aaeba18cebbb.png)
テスト機では「20」なので、「60」に変更します。
```
gesture_prop set [ID] "Button Right Click Zone Size" array:double:60
```
![Screenshot 2024-11-03 17.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/d57421f5-bfed-a38d-4b35-2fb18d260708.png)
これで範囲が広がり、タッチパッド右半分の1本指クリックが右クリックとして機能するようになりました。

Chromebookのタッチパッドの右下を右クリックボタンにする方法の説明は以上です。



# 他の役に立つかもしれないパラメータ
`"Device Touchpad"`の値をfalseに変更するとタッチパッドによるカーソル移動やタップ操作を無効化できます（1本指クリックのみ有効）。
![Screenshot 2024-11-03 18.17.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/f813f299-fd52-7f07-3da3-3ecff27a000a.png)

`"Two Finger Vertical Close Distance Thresh"`の値を0に変更すると2本指タップと3本指タップが無効化されます（各クリックは有効）。
![Screenshot 2024-11-03 18.21.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169404/51ef3d5d-30dd-eb57-6c52-fa4c59c96d2e.png)




# パラメータ一覧
テスト機で取得したパラメータの一覧です（右はDeepL翻訳）。
|||
|:-|:-|
|"Accel Max dt"                                         |アクセル最大dt|
|"Accel Min dt"                                         |アクセル 最小 dt|
|"Active Area Bottom"                                   |アクティブエリア下部|
|"Active Area Left"                                     |アクティブエリア左|
|"Active Area Right"                                    |アクティブエリア 右|
|"Active Area Top"                                      |アクティブエリア トップ|
|"Australian Scrolling"                                 |オーストラリアのスクロール|
|"Bottom Zone Size"                                     |ボトムゾーンサイズ|
|"Box Height"                                           |ボックスの高さ|
|"Box Width"                                            |ボックス幅|
|"Button Evaluation Timeout"                            |ボタン評価タイムアウト|
|"Button Finger Timeout"                                |ボタンフィンガータイムアウト|
|"Button Max Distance From Expected"                    |ボタンの予想最大距離|
|"Button Move Distance"                                 |ボタン移動距離|
|"Button Right Click Zone Enable"                       |ボタン 右クリック ゾーン 有効|
|"Button Right Click Zone Size"                         |ボタン右クリック ゾーンサイズ|
|"Change Min Move Distance"                             |最小移動距離の変更|
|"Change Timeout"                                       |変更タイムアウト|
|"Click Drag Min Slope"                                 |クリックドラッグ 最小勾配|
|"Click Drag Pressure Diff Factor"                      |クリックドラッグ圧力差|
|"Click Drag Pressure Diff Thresh"                      |クリック ドラッグ 圧力差 しきい値|
|"Compute Surface Area from Pressure"                   |圧力から表面積を計算|
|"Compute Surface Area from Touch Size for Haptic Pads" |ハプティックパッドのタッチサイズから表面積を計算|
|"Custom Haptic Button Force Threshold Down"            |カスタム触覚ボタン力しきい値ダウン|
|"Custom Haptic Button Force Threshold Up"              |カスタムハプティックボタン力しきい値アップ|
|"Damp Scroll Min Move Factor"                          |ダンプスクロール 最小移動ファクター|
|"Delay On Possible Liftoff"                            |リフトオフ遅延|
|"Device Mouse"                                         |デバイス マウス|
|"Device Node"                                          |デバイスノード|
|"Device Pointing Stick"                                |デバイス ポインティングスティック|
|"Device Product ID"                                    |デバイス製品ID|
|"Device Touchpad"                                      |タッチパッド|
|"Device Vendor ID"                                     |デバイスベンダーID|
|"Drumroll Co Move Ratio"                               |ドラムロールの共同移動比率|
|"Drumroll Max Speed Change Factor"                     |ドラムロール 最大速度変更ファクター|
|"Drumroll Speed Thresh"                                |ドラムロール速度しきい値|
|"Drumroll Suppression Enable"                          |ドラムロール抑制 有効|
|"Dump Debug Log"                                       |デバッグログのダンプ|
|"Dynamic Haptic Down Ratio"                            |ダイナミック・ハプティック・ダウン比|
|"Dynamic Haptic Up Ratio"                              |ダイナミック・ハプティック・アップ・レシオ|
|"Enable Haptic Button Generation"                      |触覚ボタン生成の有効化|
|"Evaluation Timeout"                                   |評価タイムアウト|
|"Event Debug Logging Components Enable"                |イベントデバッグログコンポーネント有効|
|"Event Logging Enable"                                 |イベントログ有効化|
|"Fake Timestamp Delta"                                 |フェイク・タイムスタンプ・デルタ|
|"Fat Finger Min Move Distance"                         |太い指の最小移動距離|
|"Fat Finger Pressure Ratio"                            |ファットフィンガープレッシャーレシオ|
|"Fat Finger Width Ratio"                               |太い指の幅の比率|
|"Filter Low Pressure"                                  |フィルター 低圧|
|"Finger Merge Distance Thresh"                         |指の合体距離 しきい値|
|"Finger Merge Filter Enabled"                          |フィンガーマージフィルタ有効|
|"Finger Merge Maximum Pressure"                        |フィンガー・マージ最大圧力|
|"Finger Merge Min Pressure"                            |フィンガーマージ最小圧力|
|"Finger Merge Minimum Touch Major"                     |フィンガーマージ 最小タッチメジャー|
|"Finger Moving Energy"                                 |指の移動エネルギー|
|"Finger Moving Hysteresis"                             |指移動ヒステリシス|
|"Fling Buffer Depth"                                   |フリングバッファの深さ|
|"Fling Buffer Min Avg Speed"                           |フライングバッファ 最小平均速度|
|"Fling Buffer Suppress Zero Length Scrolls"            |フリングバッファ ゼロ長スクロールの抑制|
|"Fling Stop Extra Delay"                               |フリングストップエクストラディレイ|
|"Fling Stop Timeout"                                   |フリングストップタイムアウト|
|"Force Calibration Offset"                             |フォースキャリブレーションオフセット|
|"Force Calibration Slope"                              |フォースキャリブレーションスロープ|
|"Force Touch Count To Match Finger Count"              |タッチカウントを強制的にフィンガーカウントと一致させる|
|"Four Finger Swipe Distance Ratio"                     |4本指スワイプ距離比|
|"Four Finger Swipe Distance Thresh"                    |4本指スワイプ距離閾値|
|"Haptic Button Sensitivity"                            |触覚ボタンの感度|
|"Haptic Complete Release Suppression Speed"            |ハプティック完全解放抑制速度|
|"Horizontal Resolution"                                |水平解像度|
|"Horizontal Scroll Snap Slope"                         |水平スクロール スナップ スロープ|
|"Hysteresis Pinch Scale Resolution Squared"            |ヒステリシス ピンチスケール 分解能の2乗|
|"Input Queue Delay"                                    |入力キュー遅延|
|"Input Queue Max Delay"                                |入力キュー最大遅延|
|"Input Queue Min Nonsuppression Speed"                 |入力キュー 最小非抑制速度|
|"Integrated Touchpad"                                  |統合タッチパッド|
|"Inter-Tap Timeout"                                    |タップ間タイムアウト|
|"Invert Scrolling"                                     |反転スクロール|
|"Inward Pinch Minimum Angle"                           |内側ピンチ最小角度|
|"Keyboard Palm Prevent Timeout"                        |キーボード パーム タイムアウト防止|
|"Keyboard Touched Timeval High"                        |キーボード接触時間|
|"Keyboard Touched Timeval Low"                         |キーボード接触時間|
|"Liftoff Speed Factor"                                 |リフトオフ速度係数|
|"Log Path"                                             |ログパス|
|"Logging Notify"                                       |ロギング通知|
|"Logging Reset"                                        |ロギングリセット|
|"Max Allowed Pressure Change Per Sec"                  |1秒あたりの最大許容圧力変化|
|"Max Dynamic Haptic Up Force"                          |最大動的触覚アップフォース|
|"Max Finger Stationary Speed"                          |指の最大静止速度|
|"Max Hysteresis Pressure Per Sec"                      |最大ヒステリシス圧力/秒|
|"Max Pressure Change Duration"                         |最大圧力変化時間|
|"Max Stationary Move Speed Hysteresis"                 |最大静止移動速度 ヒステリシス|
|"Max Stationary Move Speed"                            |最大静止移動速度|
|"Max Stationary Move Suppress Distance"                |最大静止移動抑制距離|
|"Merged Finger Max Age"                                |マージフィンガー 最大年齢|
|"Merged Finger Max X Move"                             |マージフィンガー最大X移動|
|"Merged Finger Max Y Move"                             |マージフィンガー 最大Y移動|
|"Merged Finger Suspicious Angle Min Displacement"      |マージフィンガー 不審角度 最小変位|
|"Merged Finger Touch Major Pressure Ratio"             |マージフィンガータッチ主要圧力比|
|"Merged Finger Touch Major Thresh"                     |マージドフィンガータッチメジャースレッシュ|
|"Merged Finger X Jump Max Disp"                        |マージフィンガー X ジャンプ|
|"Merged Finger X Jump Min Disp"                        |マージ・フィンガー X ジャンプ 最小ディスプ|
|"Metrics Mouse Moving Time"                            |メトリクス マウス移動時間|
|"Metrics Mouse Warmup Session"                         |メトリクス マウスウォームアップセッション|
|"Metrics Noisy Ground Distance"                        |ノイジー・グラウンド距離|
|"Metrics Noisy Ground Time"                            |ノイジー・グラウンド・タイム|
|"Min Interpolate Period"                               |最小補間周期|
|"Minimum Movement Direction Detection"                 |最小移動方向検出|
|"Minimum Pinch Scale Resolution Squared"               |最小ピンチスケール分解能の2乗|
|"Motion Tap Prevent Timeout"                           |モーションタップ防止タイムアウト|
|"Mouse Accel Curves"                                   |マウス加速カーブ|
|"Mouse CPI"                                            |マウスCPI|
|"Mouse Pointer Accel Curve"                            |マウスポインタアクセルカーブ|
|"Mouse Scroll Curves"                                  |マウススクロールカーブ|
|"Move Change Lock Ratio"                               |移動変更ロック率|
|"Move Change Lock Speed"                               |移動変更ロック速度|
|"Move Lock Speed"                                      |移動ロック速度|
|"Move Report Distance"                                 |移動距離|
|"Multiple Palm Width"                                  |複数の手のひら幅|
|"Old Mouse Accel Curves"                               |旧マウスアクセルカーブ|
|"One Finger Click Wiggle Timeout"                      |一本指クリック ウィグルタイムアウト|
|"Orientation Maximum"                                  |方向 最大|
|"Orientation Minimum"                                  |方向最小値|
|"Palm Edge Zone Min Point Speed"                       |パームエッジゾーン 最小ポイント速度|
|"Palm Edge Zone Width"                                 |パームエッジゾーン幅|
|"Palm Eval Timeout"                                    |パーム評価タイムアウト|
|"Palm Filter Top Edge Enable"                          |パームフィルタトップエッジ有効|
|"Palm Pointing Max Reverse Move Distance"              |手のひらポインティング 最大逆移動距離|
|"Palm Pointing Min Move Distance"                      |手のひらポインティング最小移動距離|
|"Palm Pressure"                                        |手のひら圧力|
|"Palm Split Maximum Distance"                          |パームスプリット最大距離|
|"Palm Stationary Distance"                             |パーム静止距離|
|"Palm Stationary Time"                                 |手のひらの静止時間|
|"Palm Width"                                           |パーム幅|
|"Pinch Certain Minimum Movement"                       |ピンチ最小動作|
|"Pinch Enable"                                         |ピンチ有効|
|"Pinch Evaluation Timeout"                             |ピンチ評価タイムアウト|
|"Pinch Guess Consistent Movement Ratio"                |ピンチ 推測 一貫した動き 比率|
|"Pinch Guess Minimum Movement"                         |ピンチ最小移動量|
|"Pinch Initial Scale Time Inverse"                     |ピンチ初期スケール時間|
|"Pinch Noise Level Squared"                            |ピンチノイズレベルの2乗|
|"Pinch Thumb Minimum Movement"                         |親指ピンチ最小移動|
|"Pinch Zoom Maximum Angle"                             |ピンチズーム 最大角度|
|"Pinch Zoom Minimum Events"                            |ピンチズーム最小イベント|
|"Point X Out Scale"                                    |ポイントXアウトスケール|
|"Point Y Out Scale"                                    |ポイントYアウトスケール|
|"Pointer Accel Curve"                                  |ポインタアクセルカーブ|
|"Pointer Acceleration"                                 |ポインタ加速度|
|"Pointer Sensitivity"                                  |ポインター感度|
|"Pressure Calibration Offset"                          |圧力校正オフセット|
|"Pressure Calibration Slope"                           |圧力校正スロープ|
|"Pressure Minimum Threshold"                           |圧力最小しきい値|
|"Quick Acceleration Factor"                            |クイック加速係数|
|"Quick Move Distance Thresh"                           |クイック移動距離しきい値|
|"Raw Touch Passthrough"                                |生のタッチパススルー|
|"Right Click Second Finger Age Thresh"                 |右クリック第二指年齢しきい値|
|"Right Click Start Time Diff Thresh"                   |右クリック 開始時間 差しきい値|
|"Scroll Accel Curve"                                   |スクロールアクセルカーブ|
|"Scroll Minimum Angle"                                 |スクロール最小角度|
|"Scroll Sensitivity"                                   |スクロール感度|
|"Scroll X Out Scale"                                   |スクロールXアウトスケール|
|"Scroll Y Out Scale"                                   |スクロールYアウトスケール|
|"Smooth Accel"                                         |スムーズアクセル|
|"Stationary Pinch Scale Resolution Squared"            |定常ピンチスケール分解能の2乗|
|"Stationary Pinch Time"                                |定常ピンチ時間|
|"Stationary Wiggle Filter Enabled"                     |静止ウィグルフィルタ有効|
|"Suppress Immediate Tapdown"                           |即時タップダウンの抑制|
|"T5R2 Three Finger Click Enable"                       |T5R2 3本指クリック有効|
|"Tap Drag Delay"                                       |タップドラッグディレイ|
|"Tap Drag Enable"                                      |タップドラッグ有効|
|"Tap Drag Lock Enable"                                 |タップドラッグロック有効|
|"Tap Drag Stationary Time"                             |タップドラッグ 静止時間|
|"Tap Drag Timeout"                                     |タップドラッグタイムアウト|
|"Tap Enable"                                           |タップ有効|
|"Tap Exclusion Border Width"                           |タップ除外ボーダー幅|
|"Tap Maximum Finger Age"                               |タップ最大指年齢|
|"Tap Maximum Movement"                                 |タップ最大移動量|
|"Tap Min Separation"                                   |タップ 最小分離|
|"Tap Minimum Pressure"                                 |最小圧力をタップ|
|"Tap Move Distance"                                    |タップ移動距離|
|"Tap Paused"                                           |タップ一時停止|
|"Tap Timeout"                                          |タップタイムアウト|
|"Three Finger Click Enable"                            |3本指クリック有効|
|"Three Finger Swipe Distance Ratio"                    |3本指スワイプ距離比|
|"Three Finger Swipe Distance Thresh"                   |3本指スワイプ距離しきい値|
|"Three Finger Swipe Enable"                            |三本指スワイプ有効|
|"Thumb Click Prevention Timeout"                       |親指クリック防止タイムアウト|
|"Thumb Evaluation Timeout"                             |親指評価タイムアウト|
|"Thumb Movement Factor"                                |親指移動係数|
|"Thumb Pinch Delay Factor"                             |親指ピンチ遅延係数|
|"Thumb Pinch Evaluation Timeout"                       |親指ピンチ評価タイムアウト|
|"Thumb Pinch Minimum Movement"                         |親指ピンチ最小動作|
|"Thumb Pinch Movement Ratio"                           |親指ピンチ動作比率|
|"Thumb Pinch Threshold Ratio"                          |親指ピンチしきい値比|
|"Thumb Slow Pinch Similarity Ratio"                    |親指低速ピンチ類似度比|
|"Thumb Speed Factor"                                   |親指スピードファクター|
|"Top Edge Tap Exclusion Border Width"                  |上端タップ除外ボーダー幅|
|"Touchpad Device Output Bias on X-Axis"                |X軸のタッチパッドデバイス出力バイアス|
|"Touchpad Device Output Bias on Y-Axis"                |Y軸のタッチパッドデバイス出力バイアス|
|"Touchpad Stack Version"                               |タッチパッドスタックバージョン|
|"Tracing Enabled"                                      |トレース有効|
|"Trend Classifying 2nd-order Motion Enabled"           |トレンド分類 2 次モーション有効|
|"Trend Classifying Filter Enabled"                     |トレンド分類フィルター有効|
|"Trend Classifying Min Num of Samples"                 |トレンド分類 最小サンプル数|
|"Trend Classifying Num of Samples"                     |トレンド分類 サンプル数|
|"Trend Classifying Z Threshold"                        |トレンド分類 Zしきい値|
|"Two Finger Horizontal Close Distance Thresh"          |2本指の水平距離しきい値|
|"Two Finger Move Distance Thresh"                      |二本指移動距離しきい値|
|"Two Finger Pressure Diff Factor"                      |二本指圧力差係数|
|"Two Finger Pressure Diff Thresh"                      |二本指圧力差閾値|
|"Two Finger Scroll Distance Thresh"                    |二本指スクロール距離しきい値|
|"Two Finger Vertical Close Distance Thresh"            |二本指垂直近接距離閾値|
|"Use Custom Haptic Button Force Thresholds"            |カスタムハプティックボタン力しきい値を使用する|
|"Use Custom Mouse Pointer Accel Curve"                 |カスタムマウスポインタアクセルカーブの使用|
|"Use Custom Touchpad Pointer Accel Curve"              |カスタムタッチパッドポインタアクセルカーブの使用|
|"Use Custom Touchpad Scroll Accel Curve"               |カスタムタッチパッドを使用 スクロールアクセルカーブ|
|"Use Dynamic Haptic Thresholds"                        |ダイナミック・ハプティックしきい値の使用|
|"Vertical Resolution"                                  |垂直解像度|
|"Vertical Scroll Snap Slope"                           |垂直スクロール スナップスロープ|
|"Wiggle Button Down Timeout"                           |ウィグル・ボタン・ダウン・タイムアウト|
|"Wiggle Max Distance"                                  |ウィグルの最大距離|
|"Wiggle Timeout"                                       |ウィグルタイムアウト|
|"Zero Finger Click Enable"                             |ゼロフィンガークリック有効|



# （おまけ）タッチパッド操作まとめ
|操作|機能|
|:-|:-|
|1本指クリック/タップ|左クリック|
|2本指クリック/タップ|右クリック|
|2本指上下スワイプ|上下スクロール|
|2本指左右スワイプ|左右スクロールor戻る/進む|
|2本指ピンチ|ズーム|
|3本指クリック/タップ|中クリック|
|3本指上下スワイプ|ウィンドウ一覧表示/非表示|
|3本指左右スワイプ|タブ切り替え|
|4本指左右スワイプ|仮想デスクトップ切り替え|

（ChromeOS バージョン: 130.0.6723.84（Official Build） （64 ビット）にて確認）

以上