Могу ли я заблокировать интерфейс определенного приложения, не блокируя весь экран? На работе было бы очень полезно иметь возможность оставлять определенные приложения открытыми, оставляя мой рабочий стол, поскольку коллеги часто получают доступ к моему рабочему столу, чтобы добавлять изменения. Однако я хотел бы заблокировать pidgin / skype / firefox / thunderbird, чтобы он оставался в системе, но не использовался / не просматривался без отдельного пароля.
Отредактированная версия этого сценария (полностью) скроется/покажет интерфейсы (окна) любого приложения, перечисленного в главном разделе сценария (переключатель).
Это имеет "умеренную" защиту паролем, так как пароль хранится в сценарии. Сочетание клавиш для запущения скрипта будет другим барьером, который предотвратит доступ слишком легко. Это, вероятно, будет достаточно в ситуации, которую Вы упоминаете, но необходимо будет решить.
Сценарий использует обоих xdotool
и wmctrl
:
sudo apt-get install xdotool wmctrl
Затем просто скопируйте сценарий ниже в пустой файл, сохраните его как password_app.py
, изменитесь, если Вы хотите текущий пароль "Обезьяна" в строке:
if passw == "Monkey":
В главном разделе сценария добавьте приложения, от которых необходимо скрыть интерфейс. Как пример, я установил:
applications = ["gedit", "thunderbird"]
Тестовый прогон это командой:
python3 /path/to/password_app.py
Вам нужен пароль и для сокрытия и для показа Вашего интерфейса:
Если все хорошо работает, добавьте его к комбинации сочетания клавиш: Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
python3 /path/to/password_app.py
#!/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
Приложение, которое было разработано для использования в своих интересах дополнительных полномочий пользователя как Параметры настройки системы - учетные записи пользователей , может делать это.
приложение как Thunderbird, который не был разработан как этот, не может out-of-the-box. Поэтому Ваш имеют две возможности:
su
в пользователя, когда необходимо считать почту и сохранить закрытым, если Вы не делаете...