Как заблокировать определенные приложения от открытия на определенных учетных записях (например: Остановитесь считают John от открытия Firefox или Gimp). Предполагается, что это для GUI а не терминала и только относилось бы к определенным пользователям, таким образом, например, пользователь X может открыть Gimp, но не Firefox, пользователь Z может открыть Software Center, но не VirtualBox.
Что хороший и простой способ там, чтобы сделать это для нового пользователя Ubuntu.
Если блок предназначен для блокирования not-so-experienced пользователей от использования определенных приложений, редактируя (локальная копия) файл на рабочем столе приложения (как описано в [1]
) вероятно, самый быстрый и самый легкий путь.
Некоторые дополнительные вещи могут быть сделаны, чтобы создать дополнительный барьер и/или предотвратить то, что пользователь узнает слишком легко, что мы сделали для блокирования приложения ([2]
и [3]
).
Набор не подходит для необслуживаемых ситуаций с опытными пользователями. В "домашних" ситуациях со средними пользователями это будет достаточно во многих случаях.
Скопируйте файл на рабочем столе приложения в /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 от Тире или попытается открыть файл, который связан с приложением:
Сокрытие приложения от Тире (дополнительная мера)
После того, как мы внесли изменения выше, имея gedit.desktop
файл все еще открывается, мы можем добавить дополнительную строку:
NoDisplay=true
Путем добавления этой строки, gedit
даже не обнаружится в Тире.
Undo
Для отмены просто удалите локальное .desktop
файл от ~/.local/share/applications
В то время как, после редактирования .desktop
файл, приложение не будет больше обнаруживаться в Тире, поиск Тире все еще покажет наш недавно созданный gedit.desktop
файл, который мог бы неумышленно дать подсказку, как выйти из блока приложений.
Избегать, чтобы, мы исключили каталог ~/.local/share/applications
от Тире ищут и очищают историю поиска.
Настройки Открытой системы> "безопасность и Конфиденциальность"> "Файлы и Приложения" (вкладка). Добавьте каталог ~/.local/share/applications
к списку для исключения из поиска.
Перенаправление gedit
команда (1)
Редактирование .desktop
файл предотвращает использование приложения от Тире, но если пользователь будет знать, что AltF2combination и команда запускают приложение, то он все еще сможет запустить приложение, точно так же, как с терминалом. Хорошее и легкое для установки дополнительной меры должны создать (если она еще не существует), каталог ~/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]
, и/или измените комбинацию сочетания клавиш по умолчанию для выполнения терминала (Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Начинающие")
.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
Блокирование определенных приложений может также быть сделано путем запущения скрипта в фоновом режиме. Сценарий должен был бы принять определенные меры, если одно из "запрещенных" приложений запущено.
Сценарий ниже предлагает гибкий способ заблокировать определяемые пользователем приложения. Это работает с простой командой с запрещенными приложениями как аргумент, например, (предположение, что Вы сделали исполняемый файл сценария):
/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"
):
(кто сказал, что Единица не позволяет помещать средство запуска справа?)
Сценарий
#!/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
Вы, вероятно, захотите иметь этого под сочетанием клавиш: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду как выше.