Udev не запускает команду xinput внутри скрипта

Проблема в том, что в Bash раскрытие фигурных скобок происходит до раскрытия переменных. Это означает, что раскрытие фигурных скобок не будет учитывать переменные. Вы можете использовать:

eval "echo dat{10..$group}"

На выходе будет:

dat10 dat11 dat12 dat13 dat14

В вашем случае используйте:

mv $(eval "echo dat{10..$group}") "$group_name""1"
1
03.10.2020, 10:07
1 ответ

Я продолжал искать и нашел этот пост на стеке для суперпользователя, в котором говорится, что xinput должен иметь установленные переменные среды DISPLAY и XAUTHORITY, я смог изменить свой скрипт, и это сработало! Однако мне также пришлось добавить сон и заставить его работать в фоновом режиме. Вот мой окончательный сценарий:

my_rule.rules:

ATTRS{idVendor}=="dummy", ATTRS{idProduct}=="dummy", ACTION=="add", RUN+="/path/to/my_sript.sh"

my_script.sh:

#!/usr/bin/bash
out_file=/path/to/out.txt
# run normal if given argument, start new in background else
if [[ $1 ]]
then
    sleep 1
    mouse_id="my_mouse's_id"
    xenv="env DISPLAY=:0 XAUTHORITY=/home/my_name/.Xauthority"
    # button map before
    $xenv /usr/bin/xinput get-button-map "$mouse_id" >> $out_file
    $xenv /usr/bin/xinput set-button-map "$mouse_id" 2 3 2 4 5 6 7 1 9
    # button map after
    $xenv /usr/bin/xinput get-button-map "$mouse_id" >> $out_file
    echo finished >> $out_file
else
    echo running > $out_file
    # run it, but detached in the background
    /path/to/my_script.sh run_normal & 
fi

Я также хочу отметить для всех, что udev вызывает скрипт около 18 раз, когда я подключаю мышь, но это не проблема.

1
18.03.2021, 23:00

Теги

Похожие вопросы