画面全体をロックせずに特定のアプリケーションのインターフェイスをロックできますか?同僚が変更を追加するためにデスクトップにアクセスすることが多いため、デスクを離れるときに特定のアプリケーションを開いたままにしておくことができると、仕事で非常に役立ちます。ただし、Pidgin/skype/firefox/Thunderbirdをロックアウトして、ログインしたままで、別のパスワードがないと使用できない/表示できないようにします。
このスクリプト の編集バージョンは、anyアプリケーションのインターフェイス(ウィンドウ)を(完全に)非表示/表示します。スクリプトのセクション(トグル)。
パスワードはスクリプト内に保存されるため、「穏やかな」パスワード保護があります。スクリプトを実行するためのキーの組み合わせは、アクセスを簡単に防ぐもう1つの障壁になります。あなたが言及する状況ではおそらくそれで十分でしょうが、あなたは決定しなければなりません。
スクリプトはxdotool
とwmctrl
の両方を使用します。
Sudo apt-get install xdotool wmctrl
次に、以下のスクリプトを空のファイルにコピーし、password_app.py
として保存し、次の行に現在のパスワード「Monkey」が必要な場合は変更します。
if passw == "Monkey":
スクリプトのheadセクションで、インターフェイスを非表示にする必要がある/必要なアプリケーションを追加します。例として、次のように設定します。
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
次のような追加のユーザー権限を利用するように設計されたアプリケーション System Settings - User accountscanこれを行います。
そのように設計されていないThunderbirdのようなアプリケーションは、すぐに使用することはできません。したがって、2つの可能性があります。
su
を作成し、そうでない場合は閉じたままにします...