
Kann ich die Benutzeroberfläche einer bestimmten Anwendung sperren, ohne den gesamten Bildschirm zu sperren? Bei der Arbeit wäre es sehr nützlich, bestimmte Anwendungen geöffnet lassen zu können, wenn ich meinen Schreibtisch verlasse, da Kollegen häufig auf meinen Desktop zugreifen, um Änderungen vorzunehmen. Ich möchte jedoch Pidgin/Skype/Firefox/Thunderbird sperren, sodass es zwar angemeldet bleibt, aber ohne ein separates Passwort nicht verwendet/angezeigt werden kann.
Antwort1
Anwendungsfenster ausblenden, Kennwort verwenden, um sie wieder sichtbar zu machen
Eine bearbeitete Version vondieses Skriptblendet/blendet die Schnittstellen (Fenster) vonbeliebigAnwendung, aufgeführt im Kopfabschnitt des Skripts (Umschalter).
Es verfügt über einen „milden“ Passwortschutz, da das Passwort im Skript gespeichert ist. Die Tastenkombination zum Ausführen des Skripts ist eine weitere Barriere, die den Zugriff zu leicht verhindert. Das wird in der von Ihnen genannten Situation wahrscheinlich ausreichen, aber Sie müssen entscheiden.
Wie benutzt man
Das Skript verwendet sowohl
xdotool
als auchwmctrl
:sudo apt-get install xdotool wmctrl
Anschließend einfach das untenstehende Skript in eine leere Datei kopieren, unter speichern und
password_app.py
ggf. das aktuelle Passwort "Monkey" in der Zeile: ändern.if passw == "Monkey":
Fügen Sie im Kopfbereich des Skripts Anwendungen hinzu, vor denen Sie die Schnittstelle verbergen möchten. Ich habe beispielsweise Folgendes festgelegt:
applications = ["gedit", "thunderbird"]
Führen Sie einen Testlauf mit dem folgenden Befehl durch:
python3 /path/to/password_app.py
Sie benötigen das Passwort sowohl zum Ausblenden als auch zum Anzeigen Ihrer Benutzeroberfläche:
Wenn alles funktioniert, fügen Sie es einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen > „Tastatur“ > „Tastenkombinationen“ > „Benutzerdefinierte Tastenkombinationen“. Klicken Sie auf das „+“ und fügen Sie den Befehl hinzu:
python3 /path/to/password_app.py
Das Drehbuch
#!/usr/bin/env python3
import subprocess
import getpass
import os
import time
#---
applications = ["gedit", "thunderbird"]
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()
def toggle():
windowlist = os.environ["HOME"]+"/"+".windowlist.txt"
user = getpass.getuser()
wlist = [l for l in get("wmctrl -lp").splitlines()]
procs = sum([[p.split()[0] for p in get("ps -u "+user).splitlines() if app in p] for app in applications], [])
matches = sum([[l.split()[0] for l in wlist if p in l] for p in procs], [])
if len(matches) != 0:
with open(windowlist, "a+") as out:
for match in matches:
out.write(match+"\n")
subprocess.Popen(["/bin/bash", "-c", "xdotool windowunmap "+match])
else:
try:
with open(windowlist) as r:
for l in r.readlines():
subprocess.Popen(["/bin/bash", "-c", "xdotool windowmap "+l])
os.remove(windowlist)
except FileNotFoundError:
pass
try:
cmd = "zenity --entry --title='Restricted!' --text='Enter your _password:'"
passw = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()
if passw == "Monkey":
time.sleep(1)
toggle()
except subprocess.CalledProcessError:
pass
Anmerkungen
- Dies hindert Benutzer nicht daran,neue Instanzender Anwendungen, es verbirgt die aktuellen. Alles kann jedoch mit zusätzlichem Code gemacht werden :).
- Wenn ein anderer Benutzer möglicherweise eine neue Instanz einer aufgelisteten Anwendung öffnet, werden beim Ausführen des Skripts diese Fenster zunächst zu den ausgeblendeten Fenstern hinzugefügt.AlleBeim nächsten Ausführen des Skripts werden dann Fenster angezeigt.
Antwort2
Eine Anwendung, die entwickelt wurde, um zusätzliche Benutzerrechte zu nutzen, wie System Settings:User accounts dürfenmach das.
Eine Anwendung wie Thunderbird, die nicht so konzipiert wurde, kann nicht sofort einsatzbereit sein. Daher haben Sie zwei Möglichkeiten:
- Holen Sie Ihre Programmierkenntnisse raus und fügen Sie die Funktionalität selbst hinzu
- Erstellen Sie einen anderen Benutzer für Thunderbird und
su
in den Benutzer, wenn Sie die E-Mails lesen müssen, und halten Sie ihn geschlossen, wenn Sie dies nicht tun ...