Я плохо знаком с Linux, и это - вероятно, вопрос о новичке, таким образом, жаль об этом.
Я использую ПК Linux в своем цехе, и я хотел бы автоматизировать семинар. Вот почему я установил удлинитель, где все мои инструменты включаются к. Тем путем это легко к повороту всех моих инструментов все в.
Мне также включили вход питания концентратора usb там. Когда это превращено, ПК обнаруживает его, как разъединено. Я могу использовать ту информацию, чтобы автоматически заблокировать или приостановить ПК, когда это разъединяется?
TLDR; я могу сделать сценарий, который приостанавливает ПК, когда USB-устройство разъединяется?
Простой способ обнаружить события usb
udevadm monitor --kernel --property --subsystem-match=usb
Программатический подход: https://raw.githubusercontent.com/gavv/snippets/master/udev/udev_monitor_usb.c
Другие связанные темы:
то, Как я могу выполнить код каждый раз, когда USB-устройство (ООН), включилось, не требуя корневых полномочий? https://unix.stackexchange.com/questions/65891/how-to-execute-a-shellscript-when-i-plug-in-a-usb-device
крошечный сценарий ниже, приостановит компьютер на событии разъединения (любого) объема usb.
#!/usr/bin/env python3
import gi
from gi.repository import GLib, Gio
import subprocess
class WatchOut:
def __init__(self):
someloop = GLib.MainLoop()
self.setup_watching()
someloop.run()
def setup_watching(self):
self.watchdrives = Gio.VolumeMonitor.get()
# event to watch (see further below, "Other options")
self.watchdrives.connect("volume_removed", self.actonchange)
def actonchange(self, *args):
# command to run (see further below, "Other options")
subprocess.Popen(["systemctl", "suspend"])
WatchOut()
watchout.py
Пробег он на заднем плане:
python3 /path/to/watchout.py
В этом сценарии, очевидно, сигнал на "volume_removed"
используется. Другие возможные события:
"volume_added", "volume_removed", "mount_added", "mount_removed"
, Чтобы заставить его выполнить другие команды на событии, замените команду в строке:
subprocess.Popen(["systemctl", "suspend"])
(команда и args установлены как список, как ["systemctl", "suspend"]
)
, Как упомянуто в комментарии, Вы предпочли бы только управлять командой на конкретно названных объемах. Если Вы будете управлять примером ниже с одним или несколькими volumenames как аргументы, то действие будет ограничено только теми объемами:
#!/usr/bin/env python3
import gi
from gi.repository import GLib, Gio
import subprocess
import sys
args = sys.argv[1:]
class WatchOut:
def __init__(self):
someloop = GLib.MainLoop()
self.setup_watching()
someloop.run()
def setup_watching(self):
self.watchdrives = Gio.VolumeMonitor.get()
# event to watch (see further below, "Other options")
self.watchdrives.connect("volume_removed", self.actonchange)
def actonchange(self, event, volume):
if volume.get_name() in args:
# command to run (see further below, "Other options")
subprocess.Popen(["systemctl", "suspend"])
WatchOut()
Является в значительной степени тем же как первым, просто добавьте volumenames как аргументы, например,
python3 /path/to/watchout.py <volumename_1> <volumename_2>