特定のアプリケーションが特定のアカウントで開くのをブロックする方法(例:アカウントJohnがFirefoxまたはGimpを開くのを停止する)。これはGUIではなくターミナル用であり、特定のユーザーにのみ適用されると想定されているため、たとえば、ユーザーXはGimpを開くことができますが、Firefoxは開けません、ユーザーZはSoftware Centerを開けますがVirtualBoxは開けません。
Ubuntuの新しいユーザーのためにこれを行うための良い簡単な方法があります。
特定のアプリケーションが特定のアカウントで開くのをブロックする方法(例:アカウントJohnがFirefoxまたはGimpを開くのを停止する)。これはGUIではなくターミナル用であり、特定のユーザーにのみ適用されると想定されているため、たとえば、ユーザーXはGimpを開くことができますが、Firefoxは開けません、ユーザーZはSoftware Centerを開けますがVirtualBoxは開けません。
Ubuntuの新しいユーザーのためにこれを行うための良い簡単な方法があります。
回答:
ブロックが、あまり経験のないユーザーが特定のアプリケーションを使用するのをブロックすることを意図している場合、アプリケーションのデスクトップファイル(のローカルコピー)の編集(で説明[1]
)がおそらく最も高速で簡単な方法です。
追加のバリアを作成したり、アプリケーションをブロックするために私たちがやったことをユーザーが簡単に見つけてしまうことを防ぐために、いくつかの追加のことができます([2]
および[3]
)。
セットアップは、経験豊富なユーザーがいる無人の状況には適していません。平均的なユーザーがいる「自宅」の状況では、多くの場合それで十分です。
で、アプリケーションのデスクトップファイルをコピー/usr/share/applications
します~/.local/share/applications
:
cp /usr/share/applications/gedit.desktop ~/.local/share/applications/gedit.desktop
ファイルを編集します:開いているgeditウィンドウ上にドラッグして、geditで開きます(まだ可能です:))。
行を置き換える
Exec=gedit %U
沿って:
Exec=zenity --info --text 'You are not allowed to use this application'
(可能な)ショートカットを削除して、いずれかのショートカットからアプリケーションが起動しないようにします。
行を削除します(geditの例の場合):
Actions=Window;Document;
そして次のようなセクション:
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
それ以降(ログアウト/ログイン後)、ユーザーがダッシュからgeditを開こうとするか、アプリケーションにリンクされているファイルを開こうとすると、このメッセージが表示されます。
Dashからアプリケーションを非表示にする(オプションの手段)
上記の変更を行った後、gedit.desktop
ファイルを開いたまま、次の行を追加できます。
NoDisplay=true
この行を追加gedit
すると、Dashにも表示されなくなります。
元に戻す
元に戻すには、ローカル.desktop
ファイルを~/.local/share/applications
.desktop
ファイルを編集した後、アプリケーションはDashに表示されなくなりますが、Dash 検索では、新しく作成されたgedit.desktop
ファイルが表示されます。
これを回避するには、ディレクトリ~/.local/share/applications
をダッシュ検索から除外し、検索履歴をクリアする必要があります。
[システム設定]> [セキュリティとプライバシー]> [ファイルとアプリケーション](タブ)を開きます。~/.local/share/applications
リストからディレクトリを追加して、検索から除外します。
gedit
コマンドのリダイレクト(1)
.desktop
ファイルを編集すると、Dashからアプリケーションを使用できなくなりますが、ユーザーがAltF2アプリケーションを実行するための組み合わせとコマンドを知っていれば、ターミナルの場合と同様にアプリケーションを起動できます。追加のメジャーを設定するのに便利なのは、ディレクトリを作成することです(まだ存在しない場合)。~/bin
を作成小さなスクリプトを作成することです。
#!/bin/bash
zenity --info --text 'You are not allowed to use this application'
実行可能にし、アプリケーションにちなんで名前を付けます。 gedit
この場合。
以来~/bin
でありPATH
、コマンドを実行すると、代わりに「本物」のスクリプトを呼び出しますgedit
アプリケーションを。その結果、同じYou are not allowed to use this application
-messageが表示されます
リダイレクト gedit
コマンドの(2)
アプリケーションのコマンドをリダイレクトする別の方法(より限定的な効果、注意を参照)は、.bashrc
ファイルにエイリアスを追加することです。
gedit ~/.bashrc
行を追加します(geditの例):
alias gedit='zenity --info --text "You are not allowed to use this application"'
注:これは、アプリケーションが端末から直接呼び出されるのを防ぐだけなので、追加の手段としてのみ使用されます。.txt
ただし、(たとえば)ファイルをダブルクリックしても、アプリケーションは開きます。
端末の使用をまったく困難または不可能にする
ターミナルの使用を防ぐには、gnome-terminal.desktop
- と同じように-ファイルでトリック[1]
を実行したり、デフォルトのショートカットキーの組み合わせを変更してターミナルを実行したりできます([システム設定]> [キーボード]> [ショートカット]> [スターター] )
.desktop
ファイルの編集バージョンを自動的に作成(または元に戻す)する小さなツール(1のように)引数block
またはunblock
(いずれかで実行する必要があります)のいずれかで以下のスクリプトを実行すると、インストールされたアプリケーションを表す(グローバル)デスクトップファイルのリストが表示されます。
いずれかを選択すると、実行する引数に応じて、アプリケーションがブロックまたはブロック解除されます。
注意
動作させるには、ログアウト/ログインする必要があります。
スクリプト
#!/usr/bin/env python3
import os
import shutil
import sys
mode = sys.argv[1]
home = os.environ["HOME"]
global_dir = "/usr/share/applications/"
files = [file for file in os.listdir(global_dir) if file.endswith(".desktop")]
relevant = []
for i in range(len(files)):
file = files[i]
with open(global_dir+file) as src:
text = src.read()
if not "NoDisplay=true" in text:
relevant.append((file))
for i in range (len(relevant)):
print(str(i+1)+".", relevant[i])
choice = int(input("\nplease enter the number of the corresponding .desktop file: "))
filename = relevant[choice-1]
local_file = home+"/"+".local/share/applications/"+filename
global_file = global_dir+filename
def block_application(filename):
if not os.path.exists(local_file):
shutil.copyfile(global_file, local_file)
with open(local_file) as src:
lines = src.readlines()
shortcuts_section = [i for i in range(len(lines)) if lines[i].startswith("Actions=")]
if len(shortcuts_section) != 0:
lines = lines[:shortcuts_section[0]]
command = [i for i in range(len(lines)) if lines[i].startswith("Exec=")]
if len(command) != 0:
lines[command[0]] = 'Exec=zenity --info --text "You are not allowed to use this application"\n'
with open(local_file, "wt") as out:
for line in lines:
out.write(line)
if mode == "block":
block_application(filename)
elif mode == "unblock":
os.remove(local_file)
スクリプトを空のファイルにコピーし、名前を付けて保存block_apps.py
し、次のいずれかの方法で実行します。
python3 /path/to/block_apps.py block
または
python3 /path/to/block_apps.py unblock
特定のアプリケーションのブロックは、バックグラウンドでスクリプトを実行することでも実行できます。「禁止」アプリケーションの1つが実行された場合、スクリプトは特定のアクションを実行する必要があります。
以下のスクリプトは、ユーザー定義のアプリケーションをブロックする柔軟な方法を提供します。禁止されたアプリケーションを引数として、単純なコマンドで実行されます(例:スクリプトを実行可能にした場合):
/path/to/block_apps.py firefox gedit gnome-terminal
このようなアプリケーションをブロックする利点は、柔軟性があることです。1つのアカウント内であっても、他のアプリケーションを引数として使用するだけで、異なる設定を使用できます。
何をする
行のいずれかをコメント解除することにより:
# action = "xrandr --output "+screen+" --brightness 0"
または
# action = "xrandr --output "+screen+" --rotate inverted"
スクリプトは次のいずれかです。
画面を黒くする(action = "xrandr --output "+screen+" --brightness 0"
):
またはターンそれが逆さまに(action = "xrandr --output "+screen+" --rotate inverted"
):
(誰がUnityが右側にランチャーを置くことを許可していないと述べました?)
スクリプト
#!/usr/bin/env python3
import subprocess
import getpass
import sys
import time
applications = []
i = 1
while True:
try:
applications.append(sys.argv[i])
i = i+1
except IndexError:
break
cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]
#-- uncomment (only) one of the options below
# action = "xrandr --output "+screen+" --brightness 0"
action = "xrandr --output "+screen+" --rotate inverted"
#--
while True:
cmd2 = "ps -u "+getpass.getuser()
applist = subprocess.check_output(["/bin/bash", "-c", cmd2]).decode("utf-8")
for application in applications:
if application in applist:
subprocess.Popen(["/bin/bash", "-c", action])
time.sleep(5)
使い方
block_apps.py
、実行可能にします次のコマンドで実行します:
/path/to/block_apps.py <application_1> <application_2> <application_3> etc...
重要
ために殺すblock_apps.py
スクリプトをし、「ノーマル」設定を復元し、(ショートカットキーの組み合わせの下でそれを利用できるようにする)以下のスクリプトを使用します。
#!/usr/bin/env python3
import subprocess
cmd = "ps -ef | grep block_apps.py"
run = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("\n")
match = [line for line in run if "block_apps.py" in line]
command = "kill "+match[0].split()[1]
subprocess.Popen(["/bin/bash", "-c", command])
cmd1 = "xrandr"
get = subprocess.check_output(["/bin/bash", "-c", cmd1]).decode("utf-8").split()
screen = [get[i-1] for i in range(len(get)) if get[i] == "connected"][0]
restore_1 = "xrandr --output "+screen+" --brightness 1"
restore_2 = "xrandr --output "+screen+" --rotate normal"
for item in [restore_1, restore_2]:
subprocess.Popen(["/bin/bash", "-c", item])
スクリプトと同様に、空のファイルにコピーし、名前を付けて保存しkill_blockapps.py
、実行可能にして、次の方法で実行します。
/path/to/kill_blockapps.py
おそらく、これをショートカットキーの下に配置する必要があります。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、上記のようにコマンドを追加します。