xsetwacomがudevで機能しないのはなぜですか?

xsetwacomがudevで機能しないのはなぜですか?

Wacom Bambooタブレットを180度回転させるスクリプトを作成しました。私自身(ユーザー)またはrootとして実行すると正常に動作しますが、起動するとudev(つまり、タブレットがusbポートに接続されているとき)動作しません。

Udevルール:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="056a", ATTRS{idProduct}=="00d1", ATTRS{manufacturer}=="Wacom Co.,Ltd.", RUN+="/usr/local/bin/red-wacom-bamboo.sh"

Wacomスクリプト/usr/local/bin/red-wacom-bamboo.sh:

#!/usr/bin/env bash

exec > /tmp/red-wacom.log
exec 2>&1

# I had to do this otherwise xsetwacom would say:
# "Failed to open Display ."
# Is there a way to do this without using my username?
export XAUTHORITY=/home/redsandro/.Xauthority
export DISPLAY=:0

/usr/bin/xsetwacom set "Wacom Bamboo 2FG 4x5 Pen stylus" Rotate half
/usr/bin/xsetwacom set "Wacom Bamboo 2FG 4x5 Finger touch" Rotate half

結果は/tmp/red-wacom.logにあります。:

Cannot find device 'Wacom Bamboo 2FG 4x5 Pen stylus'.
Cannot find device 'Wacom Bamboo 2FG 4x5 Finger touch'.

(ログのエラーは、udevルール自体が問題ではないことを意味します。)

スクリプトで設定しようとしましたが、sleepおそらく数ミリ秒かかります。しかし、これは役に立ちません。

  • このスクリプトから直接呼び出すと、なぜ機能しないのですかudev
    • どうすれば解決できますか?
  • udev特定のユーザーでスクリプトを呼び出すことはできますか? (例:外部バックアップドライブに同期/home- /home/はそのユーザーにのみ表示されます。)

ベストアンサー1

udev がラッパースクリプトを呼び出して、後から実際の設定スクリプトを呼び出す 2 つのファイルを生成すると、動作します。 X11が操作を完了するのに時間を費やすために、構成スクリプトはしばらく待機する必要があります。私が使用する設定は次のとおりです。

udev(/usr/local/bin/setupwacom.sh) が呼び出すラッパースクリプト:

#!/usr/bin/env bash
/usr/local/bin/setupwacom-post-X11.sh &

ラッパースクリプト(/usr/local/bin/setupwacom-post-X11.sh)によって呼び出される設定スクリプト:

#!/usr/bin/env bash
sleep 2
export XAUTHORITY=/home/adrian/.Xauthority
export DISPLAY=:0
# Put your xsetwacom commands here, for example: 
xsetwacom --set "Wacom Intuos S Pad pad" Button 1 "key +ctrl +shift e"

おすすめ記事