А. Варианты конфигурации
Если блокировка предназначена для блокировки неопытных пользователей от использования определенных приложений, редактирование (локальная копия) файла рабочего стола приложения (как описано в [1]
), вероятно, является самым быстрым и простым способом.
Некоторые дополнительные действия могут быть сделаны, чтобы создать дополнительный барьер и / или предотвратить тот факт, что пользователь слишком легко узнает, что мы сделали, чтобы заблокировать приложение ([2]
и [3]
).
Настройка не подходит для ситуаций, в которых не принимают участия опытные пользователи. В «домашних» ситуациях со средними пользователями этого будет достаточно во многих случаях.
1. Пример блокировки gedit путем редактирования (локальной версии) файла .desktop.
Скопируйте файл на рабочем столе приложения в /usr/share/applications
к ~/.local/share/applications
:
cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
Отредактируйте файл: откройте его с помощью gedit (пока вы все еще можете :)), перетащив его в открытое окно gedit.
заменить линию
Exec=gedit %U
по:
Exec=zenity --info --text 'You are not allowed to use this application'
удалите (возможные) ярлыки, чтобы предотвратить запуск приложения одним из ярлыков:
удалите строку (для примера gedit):
Actions=Window;Document;
и раздел (ы), как:
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
С этого момента (после выхода из системы / входа в систему) пользователь увидит это сообщение, если попытается открыть gedit из Dash или попытается открыть файл, связанный с приложением:
Скрытие приложения от Dash (необязательная мера)
После того, как мы внесли изменения, оставив gedit.desktop
файл открытым, мы можем добавить дополнительную строку:
NoDisplay=true
Добавив эту строку, gedit
даже не будет отображаться в Dash.
Отменить
Чтобы отменить, просто удалите локальный .desktop
файл из~/.local/share/applications
2. Делая это немного сложнее выяснить
Хотя после редактирования .desktop
файла приложение больше не будет отображаться в Dash, при поиске в Dash все равно будет показан наш новый gedit.desktop
файл, который может непреднамеренно дать подсказку, как выйти из блока приложения.
Чтобы избежать этого, мы должны исключить каталог ~/.local/share/applications
из поиска Dash и очистить историю поиска.
Откройте Системные настройки> «Безопасность и конфиденциальность»> «Файлы и приложения» (вкладка). Добавьте каталог ~/.local/share/applications
в список, чтобы исключить из поиска.
3. (Не) используя терминал / командную строку
Перенаправление gedit
команды(1)
Редактирование .desktop
файла не позволяет использовать приложение из Dash, но если пользователь знает AltF2комбинацию и команду для запуска приложения, он все равно сможет запустить приложение, как и в терминале. Хорошая и простая настройка дополнительных мер - это создать (если он еще не существует) каталог ~/bin
и создать небольшой скрипт в каталоге:
#!/bin/bash
zenity --info --text 'You are not allowed to use this application'
Сделайте его исполняемым и назовите его после приложения; gedit
в таком случае.
Так как ~/bin
в PATH
выполнении команды будет вызывать сценарий вместо «реального» gedit
приложения. В результате You are not allowed to use this application
появится то же сообщение
Перенаправление gedit
команды(2)
Другой способ (с более ограниченным эффектом, см. Примечание) перенаправления команды приложения - добавить псевдоним в .bashrc
файл:
gedit ~/.bashrc
добавьте строку (пример gedit):
alias gedit='zenity --info --text "You are not allowed to use this application"'
Примечание : это должно использоваться только в качестве дополнительной меры, так как оно только предотвращает прямой вызов приложения из терминала. Двойной щелчок на (например) .txt
файле, тем не менее, все равно откроет приложение.
Сделать использование терминала трудным или невозможным вообще
Чтобы предотвратить использование терминала, вы также можете выполнить тот же трюк с gnome-terminal.desktop
файлом -, что и в [1]
, и / или изменить комбинацию сочетаний клавиш по умолчанию для запуска терминала (Системные настройки> «Клавиатура»> «Сочетания клавиш»> «Пускатели»). )
4. Небольшой инструмент для автоматического создания (или отмены) отредактированной версии .desktop
файла (как в 1.)
Если вы запустите приведенный ниже скрипт либо с аргументом, block
либо unblock
(вы должны запустить его с любым из них), вам будет представлен список с (глобальными) файлами рабочего стола, представляющими ваши установленные приложения:
Выберите один, и ваше приложение будет заблокировано или разблокировано, в зависимости от аргумента, с которым вы его запускаете.
Заметка
Возможно, вам придется выйти / войти, чтобы заставить его работать.
Сценарий
#!/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)
Скопируйте скрипт в пустой файл, сохраните его как block_apps.py
и запустите:
python3 /path/to/block_apps.py block
или
python3 /path/to/block_apps.py unblock
B. Сценарий (ы) вариант (ы)
Блокировка определенных приложений также может быть выполнена путем запуска сценария в фоновом режиме. Сценарий должен будет выполнить определенные действия, если запущено одно из «запрещенных» приложений.
1. Скрипт для управления экраном при использовании запрещенных приложений.
Сценарий ниже предлагает гибкий способ блокировки пользовательских приложений. Он запускается с помощью простой команды с запрещенными приложениями в качестве аргумента, например (при условии, что вы сделали исполняемый скрипт):
/path/to/block_apps.py firefox gedit gnome-terminal
Преимущество таких приложений в том, что они гибкие; даже в пределах одной учетной записи можно использовать разные настройки, просто используя другие приложения в качестве аргумента.
Что оно делает
Откомментировав одну из строк:
# action = "xrandr --output "+screen+" --brightness 0"
или
# action = "xrandr --output "+screen+" --rotate inverted"
Сценарий либо:
черный экран ( action = "xrandr --output "+screen+" --brightness 0"
):
или переворачивает его вверх ногами ( action = "xrandr --output "+screen+" --rotate inverted"
):
( кто сказал, что Unity не позволяет поставить панель запуска справа? )
Сценарий
#!/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)
Как пользоваться
- Скопируйте скрипт в пустой файл, сохраните его как
block_apps.py
, сделайте его исполняемым
запустите его командой:
/path/to/block_apps.py <application_1> <application_2> <application_3> etc...
Важно
, чтобы убить в block_apps.py
сценарий и восстановить «нормальные» настройки, используйте скрипт ниже (сделать его доступным при комбинации клавиш быстрого вызова):
#!/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])
Как всегда со сценариями, скопируйте его в пустой файл, сохраните как kill_blockapps.py
, сделайте его исполняемым и запустите его:
/path/to/kill_blockapps.py
Возможно, вы захотите, чтобы это было под сочетанием клавиш: Выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду, как указано выше.