
Ich versuche, die Sitzung beim Entfernen meines versteckten Geräts, bei dem es sich um den HyperFIDO U2F-Schlüssel handelt, zu sperren. Nach mehreren Versuchen hatte ich jedoch keinen Erfolg.
Ich habe versucht, eine Udev-Regel zu erstellen, /etc/udev/rules.d/50-lockscreen.rules
die wie folgt aussieht:
SUBSYSTEM="hid", ACTION=="remove", RUN+="/usr/local/bin/lock.sh"
Das aufgerufene Skript lock.sh
sieht folgendermaßen aus:
#!/bin/bash
/usr/bin/gnome-screensaver-command --lock
Kann mir jemand helfen?
Antwort1
Nehmen wir an, Sie verwenden eine Distribution, die systemd verwendet. Wenn ja ...
Schau dir das anSeiteum Informationen darüber zu erhalten, wie Sie die Schlüsselgeräteinformationen abrufen, um sie in die Regel einzufügen, sodass sie mit dem bestimmten Ereignis übereinstimmen, das mit der Entfernung verknüpft ist (es wird mehrere geben), und fügen Sie dann im RUN-Teil der Regel ein /usr/bin/loginctl lock-sessions
. Laden Sie die Udev-Regeln neu, ziehen Sie Ihren Schlüssel heraus und Ihr Bildschirm wird gesperrt, ebenso wie alle Sitzungen auf diesem Computer.
AbschließeneinsSitzung müssen Sie Ihre spezielle Sitzungs-ID finden und nur diese sperren, aber wenn Sie Root sind, haben Sie wahrscheinlich die ganze Maschine für sich allein. Das Sperren aller Sitzungen ist in den meisten Fällen kein Problem.
Und Sie sind fertig.
Antwort2
Die wahrscheinlichste Erklärung ist, dass gnome-screensaver-command, wenn es im Kontext von udev ausgeführt wird, keine Ahnung hatwessenBildschirmschoner einwelche AnzeigeEs soll ein Befehl sein – es wird nicht unter Ihrem Benutzerkonto ausgeführt und verfügt nicht über die Umgebungsvariablen, die während Ihrer X-Benutzersitzung weitergegeben werden.
Ein Ansatz, derwahrscheinlichzum Laufen gebracht werden:
- Führen Sie den Gnome-Screensaver-Befehl unter einem su-Befehl für Ihren Benutzer aus.
- Stellen Sie sicher, dass die Umgebungsvariable DISPLAY auf denselben Wert eingestellt ist, den sie in einem Terminal innerhalb Ihrer X-Sitzung hat.
- Stellen Sie sicher, dass die Verbindungsberechtigung für Ihre X-Sitzung hergestellt ist. Dies erfordert einige Anpassungen an xauth und/oder xhost. Die Details hängen stark von Ihrer genauen Konfiguration ab.
Um das Problem genauer zu erklären: X11, das Gnome als Infrastruktur verwendet, ermöglicht Szenarien wie „mehrere unabhängige Sitzungen, bei denen alle mit unterschiedlichen Benutzerkonten angemeldet sein können, die über Funktionstasten umschaltbar oder an unterschiedliche Monitore und Mäuse/Tastaturen angeschlossen sind“ („Multiseat“) und „die eigentliche Sitzung läuft auf einer anderen Maschine als der, an die der Monitor und die HID-Geräte angeschlossen sind“ („XDMCP“ ist hier das Schlüsselwort). „Eine Sitzung, ein Benutzer“ ist eigentlich nur ein möglicher Anwendungsfall und der einzige, bei dem ein Befehl, der in irgendetwas in einer solchen Sitzung eingreift, ohne Teil davon zu sein, wissen könnte, wie er richtig reagieren soll – aber für diesen Fall sind keine speziellen Vorkehrungen eingebaut.
Antwort3
Die Manpage sagt:
RUN{type} ... This can only be used for very short-running foreground tasks. Running an event process for a long period of time may block all further events for this or a dependent device. Starting daemons or other long-running processes is not appropriate for udev; the forked processes, detached or not, will be unconditionally killed after the event handling has finished.
Dies ist also in einer Udev-Regel nicht möglich. Sie können jedoch eine Udev-Regel verwenden, um mit einem anderen Programm zu kommunizieren, das Sie beim Anmelden starten und das dann den Bildschirmschoner einschaltet. Dies löst auch das Problem, diesem Programm das richtige DISPLAY, die richtigen Berechtigungscookies usw. zuzuweisen.
Es löst auch das Problem, was passieren soll, wenn mehr als ein Benutzer angemeldet ist und X verwendet (physisch, wenn mehrere Bildschirme vorhanden sind, oder remote), da X explizit so geschrieben ist, dass dies möglich ist, auch wenn viele Leute diese Funktion nicht kennen und nicht verwenden.