Блокировка интерфейса отдельного приложения

Блокировка интерфейса отдельного приложения

Могу ли я заблокировать интерфейс определенного приложения, не блокируя весь экран? На работе было бы очень полезно иметь возможность оставлять определенные приложения открытыми, когда я покидаю свое рабочее место, так как коллеги часто заходят на мой рабочий стол, чтобы вносить изменения. Однако я хотел бы заблокировать pidgin/skype/firefox/thunderbird, чтобы он оставался в системе, но не мог использоваться/не мог просматриваться без отдельного пароля.

решение1

Скрыть окна приложений, пароль, чтобы сделать их снова видимыми

Отредактированная версияэтот сценарий(полностью) скроет/покажет интерфейсы (окна)любойприложение, указанное в заголовке скрипта (переключатель).

Он имеет "мягкую" защиту паролем, поскольку пароль хранится внутри скрипта. Комбинация клавиш для запуска скрипта будет еще одним барьером, который будет слишком легко блокировать доступ. Этого, вероятно, будет достаточно в ситуации, которую вы упомянули, но вам придется решать.

введите описание изображения здесь

Как использовать

  1. В скрипте используются оба xdotoolварианта wmctrl:

    sudo apt-get install xdotool wmctrl
    
  2. Затем просто скопируйте скрипт ниже в пустой файл, сохраните его как password_app.py, измените, если хотите, текущий пароль «Monkey» в строке:

    if passw == "Monkey":
    
  3. В разделе head скрипта добавьте приложения, от которых нужно/хотите скрыть интерфейс. В качестве примера я установил:

    applications = ["gedit", "thunderbird"]
    
  4. Протестируйте его с помощью команды:

    python3 /path/to/password_app.py
    

    Пароль вам понадобится как для скрытия, так и для отображения вашего интерфейса:

  5. Если все работает нормально, добавьте его в комбинацию клавиш быстрого доступа: Выберите: Системные настройки > «Клавиатура» > «Сочетания клавиш» > «Пользовательские сочетания клавиш». Нажмите «+» и добавьте команду:

    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

Примечания

  • Это не мешает пользователям открыватьновые экземплярыприложений, он скрывает текущие. Все это можно сделать, однако, с дополнительным кодированием :).
  • Если другой пользователь может открыть новый экземпляр указанного приложения, запуск скрипта сначала добавит эти окна в скрытые окна.Всеокна появятся при следующем запуске скрипта.

решение2

Приложение, разработанное для использования дополнительных привилегий пользователя, таких как System Settings:User accounts можетсделай это.

Приложение вроде Thunderbird, которое не было разработано таким образом, не может быть готово из коробки. Поэтому у вас есть две возможности:

  1. Стряхните пыль со своих навыков программирования и добавьте функционал самостоятельно
  2. Создайте другого пользователя для Thunderbird и suвойдите в него, когда вам нужно будет прочитать почту, и держите его закрытым, если вам это не нужно...

Связанный контент