У меня есть скрипт, который я хочу запустить каждый раз, когда я включаюсь/отключаю мышь или клавиатуру к моему USB-порту.
Уже существует много документации относительно того, как настроить правила udev запустить произвольные скрипты, когда устройство включается или отключается. Но конфигурирование тех правил требует корневых полномочий. И, хотя у меня действительно есть корневой доступ на моей машине, я ищу решение, которое не требует sudo, корня, или пишущий udev правила. (почему? потому что будет легче выполнить, поддержать и распределить),
Скорее всего, решение будет использовать dbus, но я мог бы ошибиться.
(Между прочим, я и опытный пользователь и бывший хинду пользователь, не стесняйтесь выкладывать технические детали!)
Решения, которые требуют корня:
На вид устаревшие решения, которые не должны базироваться:
" то, Как я могу прислушаться 'к USB-устройству, вставило' события в Linux в Python? " вопрос имеет очень краткий образец сценарий Python с помощью pyudev. Тот сценарий может легко обнаружить, когда устройство подключено или отключено путем контроля device-event
от usb
подсистема.
, Кроме того, pyudev является реализацией чистого Python и доступен и на Python 2 и на Python 3.
На основе того примера кода, я записал auto_exec_xinput_xset_upon_usb_device_change.py (см. также новая версия ). Работы и над Python 2 и над Python 3.
#!/usr/bin/env python
import functools
import os.path
import pyudev
import subprocess
def main():
BASE_PATH = os.path.abspath(os.path.dirname(__file__))
path = functools.partial(os.path.join, BASE_PATH)
call = lambda x, *args: subprocess.call([path(x)] + list(args))
context = pyudev.Context()
monitor = pyudev.Monitor.from_netlink(context)
monitor.filter_by(subsystem='usb') # Remove this line to listen for all devices.
monitor.start()
for device in iter(monitor.poll, None):
# I can add more logic here, to run only certain kinds of devices are plugged.
call('foobar.sh')
if __name__ == '__main__':
main()