특정 계정에서 특정 앱이 열리지 않도록 차단하는 방법 않도록 차단하는 방법

특정 계정에서 특정 응용 프로그램이 열리지 않도록 차단하는 방법 (예 : 계정 John이 Firefox 또는 Gimp를 열지 못하도록 중지) 이것은 GUI 용이며 터미널이 아니라 특정 사용자에게만 적용되는 것으로 가정합니다. 예를 들어 사용자 X는 Gimp를 열 수 있지만 Firefox는 열 수없고 사용자 Z는 Software Center를 열 수 있지만 VirtualBox는 열 수 없습니다.

우분투의 새로운 사용자를 위해이 작업을 수행하는 것이 좋고 쉬운 방법은 무엇입니까?



답변

A. 구성 옵션

이 블록이 경험이없는 사용자가 특정 응용 프로그램을 사용하지 못하도록하려면 응용 프로그램의 데스크톱 파일 (에 설명 된대로)의 편집 (로컬 복사본 [1])이 가장 빠르고 쉬운 방법 일 것입니다.
추가 장벽을 만들거나 사용자가 응용 프로그램을 차단하기 위해 수행 한 작업 ( [2][3]) 을 너무 쉽게 발견한다는 사실을 방지하기 위해 몇 가지 추가 작업을 수행 할 수 있습니다 .

이 설정은 숙련 된 사용자가있는 무인 상황에 적합하지 않습니다. 일반 사용자가있는 “집”상황에서는 많은 경우 충분합니다.

1. .desktop 파일 (로컬 버전)을 편집하여 gedit를 차단하는 예

  • 응용 프로그램의 데스크탑 파일 /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를 열려고하거나 응용 프로그램에 연결된 파일을 열려고하면이 메시지를 보게됩니다.

    여기에 이미지 설명을 입력하십시오

    • 대시에서 애플리케이션 숨기기 (선택적 측정 값)

      위와 같이 변경 한 후 gedit.desktop파일을 열어 둔 상태에서 다음 줄을 추가 할 수 있습니다.

      NoDisplay=true
      

      이 줄을 추가하면 gedit대시에도 표시되지 않습니다.

    실행 취소

    실행 취소하려면 간단히 로컬 .desktop파일을~/.local/share/applications

찾기가 좀 더 어려워 짐

.desktop파일 을 편집 한 후에 는 응용 프로그램이 더 이상 Dash에 표시되지 않지만 Dash 검색 은 새로 생성 된 gedit.desktop파일을 계속 표시 하므로 의도하지 않게 응용 프로그램 블록을 이스케이프하는 방법에 대한 힌트를 줄 수 있습니다.

여기에 이미지 설명을 입력하십시오

이를 피하려면 ~/.local/share/applicationsDash 검색 에서 디렉토리 를 제외 하고 검색 기록을 지워야합니다.
시스템 설정> “보안 및 개인 정보”> “파일 및 응용 프로그램”(탭)을여십시오. ~/.local/share/applications검색에서 제외 할 디렉토리 를 목록에 추가하십시오 .

여기에 이미지 설명을 입력하십시오

3. 터미널 / 명령 줄 사용

gedit명령 재 지정(1)

.desktop파일을 편집하면 Dash에서 응용 프로그램을 사용할 수 없지만 사용자가 AltF2응용 프로그램을 실행하는 조합과 명령을 알고 있으면 터미널과 마찬가지로 응용 프로그램을 계속 시작할 수 있습니다. 추가 측정 값을 설정하는 것이 쉽고 쉬운 방법은 디렉토리를 만들고 (아직 존재하지 않는 경우) 디렉토리 ~/bin에 작은 스크립트를 만드는 것입니다.

#!/bin/bash
zenity --info --text 'You are not allowed to use this application'

실행 가능하게 만들고 응용 프로그램 이름을 따서 지정하십시오. gedit이 경우

~/binis에 있기 때문에 PATH명령을 실행하면 “실제” gedit응용 프로그램 대신 스크립트가 호출 됩니다. 결과적으로You are not allowed to use this application 메시지가 나타납니다.

gedit명령 재 지정(2)

응용 프로그램 명령을 재지 정하는 다른 방법 (보다 제한적인 효과는 참고 참조)은 .bashrc파일에 별명을 추가하는 것입니다 .

gedit ~/.bashrc

줄을 추가하십시오 (gedit 예제) :

alias gedit='zenity --info --text "You are not allowed to use this application"'

참고 : 이것은 응용 프로그램이 터미널에서 직접 호출되는 것을 방지하기 때문에 추가 측정으로 만 사용됩니다. .txt그러나 (예를 들어) 파일을 두 번 클릭하면 응용 프로그램이 계속 열립니다.

터미널 사용을 전혀 어렵거나 불가능하게하십시오

터미널 사용을 방지하기 위해 gnome-terminal.desktop파일 에서와 동일한 트릭 [1]을 수행하거나 터미널을 실행하기 위해 기본 바로 가기 키 조합을 변경할 수도 있습니다 (시스템 설정> “키보드”> “바로 가기”> “스타터” )


4. 편집 된 버전을 자동으로 생성 (또는 실행 취소)하는 작은 도구 .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

B. 스크립트 옵션

백그라운드에서 스크립트를 실행하여 특정 응용 프로그램을 차단할 수도 있습니다. “금지 된”응용 프로그램 중 하나가 실행되면 스크립트는 특정 작업을 수행해야합니다.

1. 금지 된 응용 프로그램이 사용될 때 화면을 조작하는 스크립트.

아래 스크립트는 사용자 정의 응용 프로그램을 차단하는 유연한 방법을 제공합니다. 금지 된 응용 프로그램을 인수로 사용하여 간단한 명령으로 실행됩니다 (예 : 스크립트를 실행 가능하다고 가정).

    /path/to/block_apps.py firefox gedit gnome-terminal

이와 같은 응용 프로그램 차단의 장점은 융통성이 있다는 것입니다. 한 계정 내에서도 다른 응용 프로그램을 인수로 사용하여 다른 설정을 사용할 수 있습니다.

그것이하는 일

행 중 하나를 주석 해제하여 :

# action = "xrandr --output "+screen+" --brightness 0"

또는

# action = "xrandr --output "+screen+" --rotate inverted"

스크립트는 다음 중 하나입니다.

화면을 검게합니다 ( action = "xrandr --output "+screen+" --brightness 0") :

여기에 이미지 설명을 입력하십시오

또는 거꾸로 (그것을 회전 action = "xrandr --output "+screen+" --rotate inverted") :
( ? 유니티 오른쪽에있는 실행을 넣을 수 없습니다 말했다 사람 )

여기에 이미지 설명을 입력하십시오

스크립트

#!/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

이 설정을 바로 가기 키 아래에 둘 수도 있습니다. 시스템 설정> “키보드”> “바로 가기”> “사용자 정의 바로 가기”를 선택하십시오. “+”를 클릭하고 위와 같이 명령을 추가하십시오.


답변