USB マウスをオフにした後も (まだ接続されている) xinput 設定を維持する

USB マウスをオフにした後も (まだ接続されている) xinput 設定を維持する

USB マウスの電源をオフにして再びオンにした後も、xinput 設定が維持されるようにしたいです。このイベントを監視するにはどうすればよいでしょうか?

USB レシーバーを抜いたことがないので、これは機能しません。 デバイスの取り外し、再接続、シャットダウン、再起動などを行った後も xinput 設定を維持するにはどうすればよいですか?

私の理解する限りでは、udev は HW 検出アプリケーションに使用できますが、Logitech Unifying レシーバーなどのデバイスの状態変化を検出することはできないようです。

これを解決するには、レシーバーでイベントを正常に追跡し、xinput コマンドを実行するスクリプトを作成することが鍵となると思います。このイベントを検出する方法を知っている人はいますか? もちろん、Solaar はこれを検出できますが、それは Linux の熟練していないユーザーにとって簡単であるという意味ではありません。

ありがとう!

答え1

私は、Unix Stack Exchange の別の投稿からの提案に基づいてこの問題を解決しました。

簡単に言うと、マウスの変化を探すために 2 秒ごとにループするバックグラウンド シェル スクリプトを実行し、変化が見つかると xinput コマンドを再実行します。

オリジナルの(そしてよりシンプルな)解決策はここに掲載されています:

https://unix.stackexchange.com/questions/332573/how-to-make-xinput-commands-permanent/340594#340594

実行するスクリプトは次のとおりです~/.xinitrc:

# Map mouse button 8 (top right) to button 2 (top left) and vice versa, run when changes to the mouse occur
while true; do
        NEW_MOUSEID=$(xinput | grep "Expert Mouse" | grep -o -E '[0-9]+' | head -n 1)
        if [ "$MOUSEID" != "$NEW_MOUSEID" ]; then
                MOUSEID=$NEW_MOUSEID
                if [ "$MOUSEID" != "" ]; then
                        xinput --set-button-map $MOUSEID 1 8 3 4 5 6 7 2 9 10 11 12
                fi
        fi
        sleep 2
done &

基本構造:

  • xinputからのUSBのIDが2秒ごとに変化するのを監視します
  • マウス ID が空白の場合は接続されていないので、xinput を実行しないでください (実行するとエラーが発生します)
  • コマンドを解析すると、xinputマウス「Expert Mouse」のUSBデバイスID(例:「14」)が返されます。

元の回答では、変更を監視してlsusbコマンドを再実行することが提案されており、これも同様に機能することに注意してください。

関連情報