A. ตัวเลือกการกำหนดค่า
หากการบล็อกนั้นมีวัตถุประสงค์เพื่อบล็อกผู้ใช้ที่ไม่ได้มีประสบการณ์การใช้งานแอปพลิเคชันบางอย่างการแก้ไข (สำเนาในเครื่อง) ไฟล์เดสก์ท็อปของแอปพลิเคชัน (ดังอธิบายใน[1]
) อาจเป็นวิธีที่เร็วและง่ายที่สุด
บางสิ่งเพิ่มเติมสามารถทำได้เพื่อสร้างสิ่งกีดขวางพิเศษและ / หรือเพื่อป้องกันความจริงที่ว่าผู้ใช้ค้นพบสิ่งที่เราได้ทำเพื่อบล็อกแอปพลิเคชันได้ง่ายเกินไป ( [2]
และ[3]
)
การตั้งค่าไม่เหมาะสำหรับสถานการณ์ที่ไม่ต้องดูแลด้วยผู้ใช้ที่มีประสบการณ์ ในสถานการณ์ "บ้าน" ที่มีผู้ใช้งานเฉลี่ยจะเพียงพอในหลายกรณี
1. ตัวอย่างสำหรับการปิดกั้น gedit โดยการแก้ไข (รุ่นท้องถิ่น) ไฟล์. desktop
คัดลอกไฟล์เดสก์ท็อปของแอปพลิเคชัน/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 หรือพยายามเปิดไฟล์ที่เชื่อมโยงกับแอปพลิเคชัน:

ซ่อนแอปพลิเคชันจาก Dash (การวัดเพิ่มเติม)
หลังจากที่เราทำการเปลี่ยนแปลงข้างต้นโดยที่gedit.desktop
ไฟล์ยังคงเปิดอยู่เราสามารถเพิ่มบรรทัดเพิ่มเติมได้:
NoDisplay=true
ด้วยการเพิ่มบรรทัดนี้gedit
จะไม่ปรากฏใน Dash
เลิกทำ
หากต้องการเลิกทำเพียงลบ.desktop
ไฟล์ในเครื่องออก~/.local/share/applications
2. ทำให้ยากต่อการค้นหา
ในขณะที่หลังจากแก้ไข.desktop
ไฟล์แอปพลิเคชันจะไม่แสดงใน Dash อีกต่อไป แต่การค้นหา Dash จะยังคงแสดงgedit.desktop
ไฟล์ที่สร้างขึ้นใหม่ของเรา

เพื่อหลีกเลี่ยงปัญหานี้เราควรแยกไดเรกทอรี~/.local/share/applications
ออกจากการค้นหา Dash และล้างประวัติการค้นหา
เปิดการตั้งค่าระบบ> "ความปลอดภัยและความเป็นส่วนตัว"> "ไฟล์และแอปพลิเคชัน" (แท็บ) เพิ่มไดเรกทอรี~/.local/share/applications
ลงในรายการเพื่อแยกออกจากการค้นหา

3. (ไม่ใช่) โดยใช้เทอร์มินัล / บรรทัดคำสั่ง
การเปลี่ยนเส้นทาง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
ข้อความ - เดียวกันจะปรากฏขึ้น
การเปลี่ยนเส้นทาง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"
):
( ใครบอกว่า 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
คุณอาจต้องการใช้ปุ่มทางลัดนี้: เลือก: การตั้งค่าระบบ> "แป้นพิมพ์"> "ทางลัด"> "ทางลัดที่กำหนดเอง" คลิกที่ "+" และเพิ่มคำสั่งดังกล่าวข้างต้น