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

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

画面全体をロックせずに、特定のアプリケーションのインターフェースをロックできますか? 同僚が頻繁に私のデスクトップにアクセスして変更を加えるため、デスクを離れるときに特定のアプリケーションを開いたままにできると職場では非常に便利です。ただし、pidgin/skype/firefox/thunderbird をロックアウトして、別のパスワードがないとログインしたまま使用/表示できないようにしたいと考えています。

答え1

アプリケーションのウィンドウを非表示にし、パスワードを入力して再度表示できるようにする

編集版このスクリプトインターフェース(ウィンドウ)を(完全に)非表示/表示しますどれでもアプリケーション、スクリプトのヘッド セクションにリストされます (切り替え)。

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

ここに画像の説明を入力してください

使い方

  1. スクリプトでxdotoolは と の両方を使用しますwmctrl

    sudo apt-get install xdotool wmctrl
    
  2. 次に、以下のスクリプトを空のファイルにコピーし、 として保存しpassword_app.py、行の現在のパスワード「Monkey」を変更するだけです。

    if passw == "Monkey":
    
  3. スクリプトのヘッド セクションに、インターフェイスを非表示にする必要があるアプリケーションを追加します。例として、次のように設定します。

    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 のような、そのように設計されていないアプリケーションは、そのままでは動作しません。そのため、次の 2 つの可能性があります。

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

関連情報