A. Конфігураційні параметри
Якщо блок призначений для того, щоб заблокувати не так досвідчених користувачів у користуванні певними програмами, редагування (локальна копія) файлу робочого столу програми (як описано в [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
Ймовірно, ви хочете, щоб цей був під клавішею швидкого доступу: Виберіть: Налаштування системи> "Клавіатура"> "Ярлики"> "Спеціальні ярлики". Клацніть "+" і додайте команду, як зазначено вище.