
起動時に実行して、動作がおかしくなった追跡ナブを無効にするシェル スクリプトを作成しています。 から開始しxinput list
、grep Stick
これを にパイプして、 のような何かにパイプする必要がありますgrep id=
。これにより、通常は 11 である 2 つの数値が得られます。私が知る限り、数値は 1 から 18 までの範囲ですが、 のような何かを記述してfoo=xinput list | grep Stick | grep id=
、 foo を 11 に設定する必要があります。以下は xinput リストの例です。
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
取得する必要があるのは、Stick 行の id= の直後の数字 11 です。
答え1
簡単に言うと、必要なコマンドは次のとおりです。
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
より詳しい説明は以下の通りです。
grep
正規表現には、後読みアサーション重要な要素は次のgrep
表現です。
grep -Po '(?<=id=)\d\d?'
これは、で始まりid=
、その後に 1 桁または 2 桁の数字が続く部分文字列に一致しますが、プレフィックスではなく数字のみが返されますid=
。
これをテストする方法は次のとおりです。
echo "id=11" | grep -Po '(?<=id=)\d\d?'
11
出力として以下が生成されます。これをコード スニペットに適用すると、次のようになります。
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
2 番目のテストとして、サンプル データをファイルに入れるとしますdata.txt
。
# data.txt
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
次に、次のコマンドを実行します。
cat data.txt | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?'
これは11
出力として生成されます。
答え2
AlpsPS/2 ALPS DualPoint Stick
xinputに指定
デバイス名を指定すると、そのデバイスのみが対象となり、絞り込むことができxinput
ます。--list
--id-only
コマンド:
xinput --list --id-only 'AlpsPS/2 ALPS DualPoint Stick'
指定されたデバイスのID値を返します。
11