udev для запуска скрипта Python

Нет, на самом деле.

Вы можете использовать Truecrypt для создания тома для хранения конфиденциальных файлов (sudo apt-get install easycrypt для приятного внешнего интерфейса), но в противном случае на самом деле нет способа заблокируйте ваши файлы.

Я предлагаю вам заблокировать или выйти из системы, когда вы покинете свой компьютер.

6
задан 9 May 2017 в 01:28

4 ответа

Мое рабочее решение

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh). Создать сценарий оболочки /usr/local/bin/a2dp-wrapper.sh
#!/bin/bash

MAC=$1
MACMOD=$(echo $MAC | sed 's/:/_/g')

PID=$(pgrep pulseaudio)
USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//')

export DISPLAY=:0
export XAUTHORITY=/home/$USER/.Xauthority

if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" 
    then
    sudo -u $USER /usr/local/bin/a2dp_2.py $MAC
fi
Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules:
ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Этот скрипт-оболочка выполняет следующее:

Изменить a2dp.py заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранен как /usr/local/bin/a2dp_2.sh).

Измените a2dp.py, заменив все экземпляры pacmd с pactl с настройкой pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh
#!/bin/bash

MAC=$1
MACMOD=$(echo $MAC | sed 's/:/_/g')

PID=$(pgrep pulseaudio)
USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//')

export DISPLAY=:0
export XAUTHORITY=/home/$USER/.Xauthority

if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" 
    then
    sudo -u $USER /usr/local/bin/a2dp_2.py $MAC
fi
[d16 ] Альтернативы: dbus loop / fixed package

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подсказка: поиск MAC-адреса вашего устройства

проверяет, приостановлен ли соответствующий приемник, и только затем запускает a2dp_2.py. Это необходимо для предотвращения бесконечного цикла, вызванного a2dp_2.py повторным подключением устройства и тем самым инициирования правила.

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подключите полученный путь к udevadm info:
USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/virtual/input/input68':
    KERNEL=="input68"
    SUBSYSTEM=="input"
    DRIVER==""
    ATTR{name}=="00:22:37:3D:DA:50"
    ATTR{phys}==""
    ATTR{properties}=="0"
    ATTR{uniq}==""
Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50 а также что он хранится как ATTR{name}.

Исправление исходной ошибки теперь доступно здесь, и ее можно легко установить, добавив ppa:ubuntu-audio-dev/pulse-testing и обновив доступные пакеты.

Экспериментальный: Захват произвольных звуковых устройств Bluetooth [!d34 ]

Не является неотъемлемой частью исходной проблемы, но это может быть полезно для использования в будущем. Существует множество способов найти MAC-адрес вашего устройства. Ниже приведено то, что я считаю наиболее полезным для правил udev:

ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="??:??:??:??:??:??" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Даже если вывод выглядит совершенно по-другому, эти две команды станут хорошим началом для поиска соответствующих условий для правила udev.

Правило:

Подключите полученный путь к udevadm info:
USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/virtual/input/input68':
    KERNEL=="input68"
    SUBSYSTEM=="input"
    DRIVER==""
    ATTR{name}=="00:22:37:3D:DA:50"
    ATTR{phys}==""
    ATTR{properties}=="0"
    ATTR{uniq}==""
Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50, а также что он хранится как [ f28].

Подключить полученный путь к udevadm info:

Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules:
ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

триггер для любого устройства ввода, у которого есть атрибут имени, который выглядит как MAC-адрес, а условное выражение в сценарии-оболочке должно быть сделано без каких-либо непредвиденных действий.

4
ответ дан 22 May 2018 в 23:04
  • 1
    Для многопользовательской настройки этот ответ askubuntu.com/a/642898/26246 имеет хорошую идею для получения требуемого env var из работающего процесса. Этот вопрос касался медиаплеера, вы можете выбрать базовый процесс, который запускается для любого сеанса пользователя. Для inf-петли, зачем он восстанавливается? если изменить драйвер или любой атрибут udev, узнайте об этом, тогда используйте этот атрибут в условии соответствия udev. В любом случае вы можете touch создать файл и использовать его как отметку времени, ваш скрипт должен проверить этот возраст файла в начале, если он новый (например: & lt; 30sec), пропустить скрипт. – user.dz 8 May 2017 в 18:55
  • 2
    @ user.dz Еще раз спасибо. Благодаря вашим советам я смог создать сценарий оболочки, который решает обе остальные проблемы. Что касается того, почему он восстанавливается и обнаруживается ли это удэв, я пока не знаю. Это потребует дальнейшего тестирования. – hife 9 May 2017 в 01:25
  • 3
    FYI, вы можете использовать RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}", чтобы передать фактическое имя устройства программе, если вы хотите, чтобы это работало для других имен устройств. Это также будет Не повторять себя . – David Foerster 10 May 2017 в 16:00
  • 4
    @DavidFoerster Хорошая точка. Спасибо. Я заменил его. – hife 10 May 2017 в 21:08
  • 5
    Хороший человек, Интересный, Мой сценарий вдохновил многих ботаников, чтобы запустить его автоматически. такие ленивые люди :) – pylover 11 May 2017 в 02:15

Мое рабочее решение

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh). Создать сценарий оболочки /usr/local/bin/a2dp-wrapper.sh #!/bin/bash MAC=$1 MACMOD=$(echo $MAC | sed 's/:/_/g') PID=$(pgrep pulseaudio) USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//') export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" then sudo -u $USER /usr/local/bin/a2dp_2.py $MAC fi Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules: ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Этот скрипт-оболочка выполняет следующее:

Изменить a2dp.py заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранен как /usr/local/bin/a2dp_2.sh).

Измените a2dp.py, заменив все экземпляры pacmd с pactl с настройкой pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh #!/bin/bash MAC=$1 MACMOD=$(echo $MAC | sed 's/:/_/g') PID=$(pgrep pulseaudio) USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//') export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" then sudo -u $USER /usr/local/bin/a2dp_2.py $MAC fi

Альтернативы: dbus loop / fixed package

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подсказка: поиск MAC-адреса вашего устройства

проверяет, приостановлен ли соответствующий приемник, и только затем запускает a2dp_2.py. Это необходимо для предотвращения бесконечного цикла, вызванного a2dp_2.py повторным подключением устройства и тем самым инициирования правила.

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подключите полученный путь к udevadm info: USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/virtual/input/input68': KERNEL=="input68" SUBSYSTEM=="input" DRIVER=="" ATTR{name}=="00:22:37:3D:DA:50" ATTR{phys}=="" ATTR{properties}=="0" ATTR{uniq}=="" Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50 а также что он хранится как ATTR{name}.

Исправление исходной ошибки теперь доступно здесь, и ее можно легко установить, добавив ppa:ubuntu-audio-dev/pulse-testing и обновив доступные пакеты.

Экспериментальный: Захват произвольных звуковых устройств Bluetooth

Не является неотъемлемой частью исходной проблемы, но это может быть полезно для использования в будущем. Существует множество способов найти MAC-адрес вашего устройства. Ниже приведено то, что я считаю наиболее полезным для правил udev:

ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="??:??:??:??:??:??" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Даже если вывод выглядит совершенно по-другому, эти две команды станут хорошим началом для поиска соответствующих условий для правила udev.

Правило:

Подключите полученный путь к udevadm info: USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/virtual/input/input68': KERNEL=="input68" SUBSYSTEM=="input" DRIVER=="" ATTR{name}=="00:22:37:3D:DA:50" ATTR{phys}=="" ATTR{properties}=="0" ATTR{uniq}=="" Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50, а также что он хранится как ATTR{name}.

Подключить полученный путь к udevadm info:

Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules: ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

триггер для любого устройства ввода, у которого есть атрибут имени, который выглядит как MAC-адрес, а условное выражение в сценарии-оболочке должно быть сделано без каких-либо непредвиденных действий.

4
ответ дан 18 July 2018 в 14:02

Мое рабочее решение

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh). Создать сценарий оболочки /usr/local/bin/a2dp-wrapper.sh #!/bin/bash MAC=$1 MACMOD=$(echo $MAC | sed 's/:/_/g') PID=$(pgrep pulseaudio) USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//') export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" then sudo -u $USER /usr/local/bin/a2dp_2.py $MAC fi Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules: ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Этот скрипт-оболочка выполняет следующее:

Изменить a2dp.py заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранен как /usr/local/bin/a2dp_2.sh).

Измените a2dp.py, заменив все экземпляры pacmd с pactl с настройкой pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh #!/bin/bash MAC=$1 MACMOD=$(echo $MAC | sed 's/:/_/g') PID=$(pgrep pulseaudio) USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//') export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" then sudo -u $USER /usr/local/bin/a2dp_2.py $MAC fi

Альтернативы: dbus loop / fixed package

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подсказка: поиск MAC-адреса вашего устройства

проверяет, приостановлен ли соответствующий приемник, и только затем запускает a2dp_2.py. Это необходимо для предотвращения бесконечного цикла, вызванного a2dp_2.py повторным подключением устройства и тем самым инициирования правила.

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подключите полученный путь к udevadm info: USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/virtual/input/input68': KERNEL=="input68" SUBSYSTEM=="input" DRIVER=="" ATTR{name}=="00:22:37:3D:DA:50" ATTR{phys}=="" ATTR{properties}=="0" ATTR{uniq}=="" Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50 а также что он хранится как ATTR{name}.

Исправление исходной ошибки теперь доступно здесь, и ее можно легко установить, добавив ppa:ubuntu-audio-dev/pulse-testing и обновив доступные пакеты.

Экспериментальный: Захват произвольных звуковых устройств Bluetooth

Не является неотъемлемой частью исходной проблемы, но это может быть полезно для использования в будущем. Существует множество способов найти MAC-адрес вашего устройства. Ниже приведено то, что я считаю наиболее полезным для правил udev:

ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="??:??:??:??:??:??" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Даже если вывод выглядит совершенно по-другому, эти две команды станут хорошим началом для поиска соответствующих условий для правила udev.

Правило:

Подключите полученный путь к udevadm info: USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/virtual/input/input68': KERNEL=="input68" SUBSYSTEM=="input" DRIVER=="" ATTR{name}=="00:22:37:3D:DA:50" ATTR{phys}=="" ATTR{properties}=="0" ATTR{uniq}=="" Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50, а также что он хранится как ATTR{name}.

Подключить полученный путь к udevadm info:

Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules: ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

триггер для любого устройства ввода, у которого есть атрибут имени, который выглядит как MAC-адрес, а условное выражение в сценарии-оболочке должно быть сделано без каких-либо непредвиденных действий.

4
ответ дан 24 July 2018 в 20:18

Мое рабочее решение

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh). Создать сценарий оболочки /usr/local/bin/a2dp-wrapper.sh #!/bin/bash MAC=$1 MACMOD=$(echo $MAC | sed 's/:/_/g') PID=$(pgrep pulseaudio) USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//') export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" then sudo -u $USER /usr/local/bin/a2dp_2.py $MAC fi Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules: ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Этот скрипт-оболочка выполняет следующее:

Изменить a2dp.py заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранен как /usr/local/bin/a2dp_2.sh).

Измените a2dp.py, заменив все экземпляры pacmd с pactl с настройкой pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh #!/bin/bash MAC=$1 MACMOD=$(echo $MAC | sed 's/:/_/g') PID=$(pgrep pulseaudio) USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//') export DISPLAY=:0 export XAUTHORITY=/home/$USER/.Xauthority if pactl list sinks short | grep "bluez_sink\.$MACMOD.*SUSPENDED" then sudo -u $USER /usr/local/bin/a2dp_2.py $MAC fi

Альтернативы: dbus loop / fixed package

Измените a2dp.py, заменив все экземпляры pacmd на pactl, отрегулировав pacmd list-sinks на pactl list sinks (в моем случае сохранено как /usr/local/bin/a2dp_2.sh).

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подсказка: поиск MAC-адреса вашего устройства

проверяет, приостановлен ли соответствующий приемник, и только затем запускает a2dp_2.py. Это необходимо для предотвращения бесконечного цикла, вызванного a2dp_2.py повторным подключением устройства и тем самым инициирования правила.

Создайте сценарий оболочки /usr/local/bin/a2dp-wrapper.sh

Подключите полученный путь к udevadm info: USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/virtual/input/input68': KERNEL=="input68" SUBSYSTEM=="input" DRIVER=="" ATTR{name}=="00:22:37:3D:DA:50" ATTR{phys}=="" ATTR{properties}=="0" ATTR{uniq}=="" Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50 а также что он хранится как ATTR{name}.

Исправление исходной ошибки теперь доступно здесь, и ее можно легко установить, добавив ppa:ubuntu-audio-dev/pulse-testing и обновив доступные пакеты.

Экспериментальный: Захват произвольных звуковых устройств Bluetooth

Не является неотъемлемой частью исходной проблемы, но это может быть полезно для использования в будущем. Существует множество способов найти MAC-адрес вашего устройства. Ниже приведено то, что я считаю наиболее полезным для правил udev:

ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="??:??:??:??:??:??" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

Даже если вывод выглядит совершенно по-другому, эти две команды станут хорошим началом для поиска соответствующих условий для правила udev.

Правило:

Подключите полученный путь к udevadm info: USER@MACHINE:~$ udevadm info -a -p /devices/virtual/input/input68 Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/virtual/input/input68': KERNEL=="input68" SUBSYSTEM=="input" DRIVER=="" ATTR{name}=="00:22:37:3D:DA:50" ATTR{phys}=="" ATTR{properties}=="0" ATTR{uniq}=="" Мы узнаем, что MAC-адрес 00:22:37:3D:DA:50, а также что он хранится как ATTR{name}.

Подключить полученный путь к udevadm info:

Добавить следующую строку в /etc/udev/rules.d/80-bt-headset.rules: ACTION=="add", SUBSYSTEM=="input" ATTR{name}=="00:22:37:3D:DA:50" RUN+="/usr/local/bin/a2dp-wrapper.sh $attr{name}"

триггер для любого устройства ввода, у которого есть атрибут имени, который выглядит как MAC-адрес, а условное выражение в сценарии-оболочке должно быть сделано без каких-либо непредвиденных действий.

4
ответ дан 31 July 2018 в 12:24

Другие вопросы по тегам:

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