web-dev-qa-db-ja.com

個々のアプリケーションのインターフェースをロックする

画面全体をロックせずに特定のアプリケーションのインターフェイスをロックできますか?同僚が変更を追加するためにデスクトップにアクセスすることが多いため、デスクを離れるときに特定のアプリケーションを開いたままにしておくことができると、仕事で非常に役立ちます。ただし、Pidgin/skype/firefox/Thunderbirdをロックアウトして、ログインしたままで、別のパスワードがないと使用できない/表示できないようにします。

2
Oceanic_Panda

アプリケーションのウィンドウ、パスワードを非表示にして、それらを再び表示できるようにします

このスクリプト の編集バージョンは、anyアプリケーションのインターフェイス(ウィンドウ)を(完全に)非表示/表示します。スクリプトのセクション(トグル)。

パスワードはスクリプト内に保存されるため、「穏やかな」パスワード保護があります。スクリプトを実行するためのキーの組み合わせは、アクセスを簡単に防ぐもう1つの障壁になります。あなたが言及する状況ではおそらくそれで十分でしょうが、あなたは決定しなければなりません。

enter image description here

使い方

  1. スクリプトはxdotoolwmctrlの両方を使用します。

    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
Jacob Vlijm

次のような追加のユーザー権限を利用するように設計されたアプリケーション System SettingsUser accountscanこれを行います。

そのように設計されていないThunderbirdのようなアプリケーションは、すぐに使用することはできません。したがって、2つの可能性があります。

  1. プログラミングスキルを捨てて、自分で機能を追加します
  2. メールを読む必要がある場合はThunderbird用に別のユーザーを作成し、ユーザーにsuを作成し、そうでない場合は閉じたままにします...
0
Fabby