A. Konfigurationsoptionen
Wenn der Block nicht so erfahrenen Benutzern die Verwendung bestimmter Anwendungen untersagen soll, ist das Bearbeiten (einer lokalen Kopie) der Desktop-Datei der Anwendung (wie in beschrieben [1]) wahrscheinlich der schnellste und einfachste Weg.
Einige zusätzliche Dinge können getan werden, um eine zusätzliche Barriere zu schaffen und / oder um zu verhindern, dass der Benutzer zu leicht herausfindet, was wir getan haben, um die Anwendung ( [2]und [3]) zu blockieren .
Die Einrichtung ist nicht für unbeaufsichtigte Situationen mit erfahrenen Benutzern geeignet. In "häuslichen" Situationen mit durchschnittlichen Benutzern ist dies in vielen Fällen ausreichend.
1.Beispiel für das Blockieren von gedit durch Bearbeiten (einer lokalen Version von) der .desktop-Datei
Kopieren Sie die Desktop - Datei der Anwendung in /usr/share/applicationszu ~/.local/share/applications:
cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
Bearbeiten Sie die Datei: Öffnen Sie sie mit gedit (solange Sie dies noch können :)), indem Sie sie über ein geöffnetes gedit-Fenster ziehen.
Ersetzen Sie die Leitung
Exec=gedit %U
durch:
Exec=zenity --info --text 'You are not allowed to use this application'
Entfernen Sie die (möglichen) Verknüpfungen, um zu verhindern, dass die Anwendung über eine der Verknüpfungen gestartet wird:
entferne die Zeile (für das gedit Beispiel):
Actions=Window;Document;
und die Abschnitte mögen:
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
Von da an (nach dem Abmelden / Anmelden) wird dem Benutzer diese Meldung angezeigt, wenn er versucht, gedit über Dash zu öffnen, oder wenn er versucht, eine mit der Anwendung verknüpfte Datei zu öffnen:

Anwendung vor Dash verstecken (optionale Maßnahme)
Nachdem wir die obigen Änderungen vorgenommen haben und die gedit.desktopDatei noch geöffnet ist, können wir eine zusätzliche Zeile hinzufügen:
NoDisplay=true
Wenn Sie diese Zeile hinzufügen, geditwird sie nicht einmal in Dash angezeigt.
Rückgängig machen
Um dies rückgängig zu machen, entfernen Sie einfach die lokale .desktopDatei von~/.local/share/applications
2. Es etwas schwieriger zu machen, es herauszufinden
Während .desktopdie Anwendung nach der Bearbeitung der Datei nicht mehr in Dash angezeigt wird , zeigt die Dash- Suche weiterhin unsere neu erstellte gedit.desktopDatei an, die möglicherweise unbeabsichtigt einen Hinweis darauf gibt, wie der Anwendungsblock verlassen werden kann.

Um dies zu vermeiden, sollten wir das Verzeichnis ~/.local/share/applicationsvon der Dash-Suche ausschließen und den Suchverlauf löschen.
Öffnen Sie die Systemeinstellungen> "Sicherheit und Datenschutz"> "Dateien und Anwendungen" (Registerkarte). Fügen Sie das Verzeichnis ~/.local/share/applicationsder Liste hinzu, um es von der Suche auszuschließen.

3. (Nicht) Verwenden der Terminal- / Befehlszeile
geditBefehl umleiten(1)
Durch das Bearbeiten der .desktopDatei wird die Verwendung der Anwendung über Dash verhindert. Wenn der Benutzer jedoch die AltF2Kombination und den Befehl zum Ausführen der Anwendung kennt , kann er die Anwendung wie mit dem Terminal starten. Eine nette und einfach einzurichtende zusätzliche Maßnahme ist, das Verzeichnis zu erstellen (falls es noch nicht existiert) ~/binund ein kleines Skript im Verzeichnis zu erstellen:
#!/bin/bash
zenity --info --text 'You are not allowed to use this application'
Machen Sie es ausführbar und benennen Sie es nach der Anwendung. geditin diesem Fall.
Da ~/binin ist PATH, wird der Befehl ausgeführt wird das Skript aufrufen anstelle der „echten“ geditAnwendung. Infolgedessen wird dieselbe You are not allowed to use this applicationMeldung angezeigt
geditBefehl umleiten(2)
Eine andere Möglichkeit (mit eingeschränkterem Effekt, siehe Hinweis), den Befehl der Anwendung umzuleiten, besteht darin, der .bashrcDatei einen Alias hinzuzufügen :
gedit ~/.bashrc
füge die Zeile hinzu (gedit Beispiel):
alias gedit='zenity --info --text "You are not allowed to use this application"'
Hinweis : Dies ist nur als zusätzliche Maßnahme zu verwenden, da nur verhindert wird, dass die Anwendung direkt vom Terminal aufgerufen wird. Ein Doppelklick auf eine (zB) .txtDatei öffnet die Anwendung jedoch weiterhin.
Machen Sie die Verwendung des Terminals schwierig oder unmöglich
Um die Verwendung des Terminals zu verhindern, können Sie in der gnome-terminal.desktopDatei den gleichen Trick [1]ausführen wie in und / oder die Standard-Tastenkombination ändern, um das Terminal auszuführen (Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Starter"). )
4. Ein kleines Tool zum automatischen Erstellen (oder Rückgängigmachen) einer bearbeiteten Version der .desktopDatei (wie in 1.)
Wenn Sie das folgende Skript entweder mit dem Argument blockoder unblock(Sie müssen es mit einem der beiden ausführen) ausführen, wird eine Liste mit (globalen) Desktop-Dateien angezeigt, die Ihre installierten Anwendungen darstellen:

Wählen Sie eine aus, und Ihre Anwendung wird abhängig vom Argument, mit dem Sie sie ausführen, gesperrt oder entsperrt.
Hinweis
Möglicherweise müssen Sie sich abmelden / anmelden, damit es funktioniert.
Das Drehbuch
#!/usr/bin/env python3
import os
import shutil
import sys
mode = sys.argv[1]
home = os.environ["HOME"]
global_dir = "/usr/share/applications/"
files = [file for file in os.listdir(global_dir) if file.endswith(".desktop")]
relevant = []
for i in range(len(files)):
file = files[i]
with open(global_dir+file) as src:
text = src.read()
if not "NoDisplay=true" in text:
relevant.append((file))
for i in range (len(relevant)):
print(str(i+1)+".", relevant[i])
choice = int(input("\nplease enter the number of the corresponding .desktop file: "))
filename = relevant[choice-1]
local_file = home+"/"+".local/share/applications/"+filename
global_file = global_dir+filename
def block_application(filename):
if not os.path.exists(local_file):
shutil.copyfile(global_file, local_file)
with open(local_file) as src:
lines = src.readlines()
shortcuts_section = [i for i in range(len(lines)) if lines[i].startswith("Actions=")]
if len(shortcuts_section) != 0:
lines = lines[:shortcuts_section[0]]
command = [i for i in range(len(lines)) if lines[i].startswith("Exec=")]
if len(command) != 0:
lines[command[0]] = 'Exec=zenity --info --text "You are not allowed to use this application"\n'
with open(local_file, "wt") as out:
for line in lines:
out.write(line)
if mode == "block":
block_application(filename)
elif mode == "unblock":
os.remove(local_file)
Kopieren Sie das Skript in eine leere Datei, speichern Sie es als block_apps.pyund führen Sie es aus:
python3 /path/to/block_apps.py block
oder
python3 /path/to/block_apps.py unblock
B. Skriptoption (en)
Das Blockieren bestimmter Anwendungen kann auch durch Ausführen eines Skripts im Hintergrund erfolgen. Das Skript müsste bestimmte Aktionen ausführen, wenn eine der "verbotenen" Anwendungen ausgeführt wird.
1. Skript zum Bearbeiten des Bildschirms, wenn verbotene Anwendungen verwendet werden.
Das folgende Skript bietet eine flexible Möglichkeit, benutzerdefinierte Anwendungen zu blockieren. Es wird mit einem einfachen Befehl ausgeführt, wobei die verbotenen Anwendungen als Argument dienen (vorausgesetzt, Sie haben das Skript ausführbar gemacht):
/path/to/block_apps.py firefox gedit gnome-terminal
Das Blockieren solcher Anwendungen hat den Vorteil, dass sie flexibel sind. Selbst innerhalb eines Kontos können verschiedene Einstellungen verwendet werden, indem einfach andere Anwendungen als Argument verwendet werden.
Was es macht
Indem Sie eine der Zeilen auskommentieren:
# action = "xrandr --output "+screen+" --brightness 0"
oder
# action = "xrandr --output "+screen+" --rotate inverted"
Das Skript entweder:
schwärzt den Bildschirm ( action = "xrandr --output "+screen+" --brightness 0"):

oder stellt es auf den Kopf ( action = "xrandr --output "+screen+" --rotate inverted"):
( Wer hat gesagt, dass Unity es nicht erlaubt, den Launcher rechts zu platzieren? )

Das Drehbuch
#!/usr/bin/env python3
import subprocess
import getpass
import sys
import time
applications = []
i = 1
while True:
try:
applications.append(sys.argv[i])
i = i+1
except IndexError:
break
cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]
#-- uncomment (only) one of the options below
# action = "xrandr --output "+screen+" --brightness 0"
action = "xrandr --output "+screen+" --rotate inverted"
#--
while True:
cmd2 = "ps -u "+getpass.getuser()
applist = subprocess.check_output(["/bin/bash", "-c", cmd2]).decode("utf-8")
for application in applications:
if application in applist:
subprocess.Popen(["/bin/bash", "-c", action])
time.sleep(5)
Wie benutzt man
- Kopieren Sie das Skript in eine leere Datei, speichern Sie es als
block_apps.py, und machen Sie es ausführbar
starte es mit dem Befehl:
/path/to/block_apps.py <application_1> <application_2> <application_3> etc...
Wichtig
Um das Skript zu beendenblock_apps.py und "normale" Einstellungen wiederherzustellen, verwenden Sie das folgende Skript (stellen Sie es unter einer Tastenkombination zur Verfügung):
#!/usr/bin/env python3
import subprocess
cmd = "ps -ef | grep block_apps.py"
run = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("\n")
match = [line for line in run if "block_apps.py" in line]
command = "kill "+match[0].split()[1]
subprocess.Popen(["/bin/bash", "-c", command])
cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]
restore_1 = "xrandr --output "+screen+" --brightness 1"
restore_2 = "xrandr --output "+screen+" --rotate normal"
for item in [restore_1, restore_2]:
subprocess.Popen(["/bin/bash", "-c", item])
Kopieren Sie es wie immer mit Skripten in eine leere Datei, speichern Sie es als kill_blockapps.py, machen Sie es ausführbar und führen Sie es aus durch:
/path/to/kill_blockapps.py
Möglicherweise möchten Sie diesen unter einer Tastenkombination haben: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl wie oben beschrieben hinzu.