Domanda Come creare uno script che interagisca con il blocco schermo / sblocco


Ho bisogno di una sceneggiatura per quando premo Ctrl + alt + L (Blocca schermo) Ho bloccato o spento tutti i dispositivi USB e ho spento tutte le mie interfacce di rete eth0.

Quando I Unlock, tutto dovrebbe tornare alla normalità. Provai

echo suspend> / sys / bus / usb / devices / usb1 / power / level 

.. ma non potrei ..

E anche

dbus-monitor --session "type = 'signal', interface = 'org.gnome.ScreenSaver' 

per interagire con lo schermo ma non è possibile.

C'è qualche metodo migliore? O qualcosa che posso studiare per creare questo script?


2
2017-11-29 00:01


origine


un approccio migliore sarebbe quello di associare uno script alla scorciatoia ctrl + alt + L, che farà ciò che vuoi e solo allora bloccherà lo schermo. Lo farei ma ultimamente ho poco tempo. Forse qualcun altro può farlo. In caso contrario, potrei tornare e scriverne uno - Sergiy Kolodyazhnyy
Quando uso CTRL + ALT + L sul mio sistema, lo schermo si blocca e appare un messaggio per inserire la password per sbloccare lo schermo. Dopo che la schermata della password è sbloccata e tutto funziona come dovrebbe. Questo è tutto fuori dalla scatola senza legature di tasti speciali. Ubuntu 16.04. Sembra che tu abbia un bug? - WinEunuuchs2Unix
Voglio solo uno script per quando blocco lo schermo, disabilitare tutte le porte USB e le mie interfacce come eth0. Ho provato ad usare qualcosa come, dbus-monitor --session "type = 'signal', interface = 'org.gnome.ScreenSaver'" | Mentre leggi x; di Case "$ x" in * "Boolean true" * echo suspend> / sys / bus / usb / devices / usb1 / power / level ...... Ma non funziona - nullXOR
@nullXOR ha pubblicato la mia risposta. Per favore, menziona se tutto è chiaro. - Jacob Vlijm


risposte:


Come eseguire script o comandi sulle modifiche in stato di blocco

Secondo questa risposta su U & L, hai provato una versione obsoleta dbus comando. Per 14.04 e versioni successive, puoi utilizzare:

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while read X; do
    if [[ "$X" =~ desktop-lock ]]; then
      SCREEN_LOCKED;
    elif [[ "$X" =~ desktop-unlock ]]; then
      SCREEN_UNLOCKED;
    fi
  done
)

che funziona bene sul mio sistema (16.04).
(Grazie per i miglioramenti di @Serg e @muru)

Certo che devi sostituire SCREEN_LOCKED e SCREEN_UNLOCKED dai comandi o script che si desidera eseguire sulle modifiche in stato di blocco, ma testato e funziona correttamente.


2
2017-11-29 06:41



@Serg a cura, grazie! - Jacob Vlijm
Se stai usando bash, puoi semplificarlo if [[ $X =~ desktop-lock ]]; then .. (e allo stesso modo per l'altro). E forse usare while read X invece di while true (la lettura non ha mai esito negativo diverso da quando termina il processo dbus-monitor?) - muru
@muru Grazie! Lo aggiungerò alla risposta :) - Jacob Vlijm
non sembra funzionare su Ubuntu 17.04. L'uscita di dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" è signal time=1497336035.520628 sender=org.freedesktop.DBus -> destination=:1.140 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired string ":1.140" signal time=1497336035.520706 sender=org.freedesktop.DBus -> destination=:1.140 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost string ":1.140", quindi nulla quando blocco o sblocco - maxbellec