如何在桌面上或系统来宾帐户的 $HOME 中创建(并在拔下时删除)指向新插入的 USB 设备的挂载点的符号链接?
答案1
您的问题原来是两个独立的问题:
- 如何在桌面上自动创建(和删除)已安装 USB 驱动器的链接
- 如何以访客帐户运行
[1.]
这些问题将在下文中得到解答[2.]
。
1. 自动创建已挂载 USB 驱动器的桌面链接(一般情况下)
使用一个小的后台脚本,您可以自动在桌面上创建到已安装的 USB 驱动器的链接,和如果驱动器被移除,也会自动将其移除。
程序;工作原理
下面的脚本是这个.此版本:
- 关注新安装的设备(使用命令
lsblk
) - 如果出现新项,它会
usb
通过以下命令检查新挂载的设备是否为设备:find /dev/disk -ls | grep <disk>
。如果usb
输出中显示,则新挂载有效。 - 如果挂载有效,则使用以下命令在用户桌面上创建一个链接:
ln -s <new_mount> <target>
。
目标链接名为:[USB] <devicename>
。
同时
- 新的安装项将添加到列表中。系统会定期(每四秒一次)检查列表。如果安装项不再存在,则会从桌面上删除其对应的链接。
如何设置
- 将以下脚本复制到一个空文件中,并将其另存为
show_usb.py
创建目录
/opt/show_usb
(因为我们想以访客帐户运行它):sudo mkdir /opt/show_usb
将脚本复制到
/opt/show_usb
:sudo cp /path/to/show_usb.py /opt/show_usb
使用以下命令从终端测试运行脚本:
python3 /opt/show_usb/show_usb.py
如果一切正常,请将其添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:
python3 /opt/show_usb/show_usb.py
剧本
#!/usr/bin/env python3
import os
import subprocess
import time
def find_dtop():
# get the localized path to the Desktop folder
home = os.environ["HOME"]; dr_file = home+"/.config/user-dirs.dirs"
return [home+"/"+ l.split("/")[-1].strip() \
for l in open(dr_file).readlines() \
if l.startswith("XDG_DESKTOP_DIR=")][0].replace('"', "")
def get_mountedlist():
return [(item.split()[0].replace("├─", "").replace("└─", ""),
item[item.find("/"):]) for item in subprocess.check_output(
["lsblk"]).decode("utf-8").split("\n") if "/" in item]
def identify(disk):
cmd = "find /dev/disk -ls | grep /"+disk
output = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
return True if "usb" in output else False
done = []; check = []
dt = find_dtop()
while True:
mnt = get_mountedlist(); mount_check = [item[1] for item in mnt]
for item in check:
if not item in mount_check:
try:
os.remove(dt+"/[USB] "+item.split("/")[-1]); check.remove(item)
except FileNotFoundError:
pass
new_paths = [dev for dev in mnt if not dev in done and not dev[1] == "/"]
valid = [dev for dev in new_paths if identify(dev[0]) == True]
for item in valid:
new = item[1]
subprocess.Popen(["ln", "-s", new, dt+"/[USB] "+new.split("/")[-1] ])
check.append(new)
time.sleep(4)
done = mnt
2. 如何自动运行脚本,特别是在来宾帐户中
要使脚本在访客会话中自动启动:
检查目录是否
/etc/guest-session/skel/.config/autostart
存在。如果不存在,则创建它:sudo mkdir -p /etc/guest-session/skel/.config/autostart
现在为来宾帐户创建启动启动器:
sudo -i gedit /etc/guest-session/skel/.config/autostart/desktop_usb.desktop
在打开的文件中,粘贴以下代码:
[Desktop Entry] Name=USB_desktop Exec=python3 /opt/show_usb/show_usb.py Type=Application
保存并关闭文件。现在,当您以访客帐户登录时,脚本将运行。
就是这样
笔记
- 有关如何编辑访客帐户的更多信息可以在这里找到。
- 该脚本仅在安装了新驱动器时才起作用,并且不会给处理器增加任何明显的负载。