当 USB 记忆棒挂载时,如何自动在桌面或 $HOME 中创建链接?

当 USB 记忆棒挂载时,如何自动在桌面或 $HOME 中创建链接?

如何在桌面上或系统来宾帐户的 $HOME 中创建(并在拔下时删除)指向新插入的 USB 设备的挂载点的符号链接?

答案1

您的问题原来是两个独立的问题:

  1. 如何在桌面上自动创建(和删除)已安装 USB 驱动器的链接
  2. 如何以访客帐户运行

[1.]这些问题将在下文中得到解答[2.]

1. 自动创建已挂载 USB 驱动器的桌面链接(一般情况下)

使用一个小的后台脚本,您可以自动在桌面上创建到已安装的 USB 驱动器的链接,如果驱动器被移除,也会自动将其移除。

在此处输入图片描述在此处输入图片描述

程序;工作原理

下面的脚本是这个.此版本:

  • 关注新安装的设备(使用命令lsblk
  • 如果出现新项,它会usb通过以下命令检查新挂载的设备是否为设备:find /dev/disk -ls | grep <disk>。如果usb输出中显示,则新挂载有效。
  • 如果挂载有效,则使用以下命令在用户桌面上创建一个链接:ln -s <new_mount> <target>
    目标链接名为:[USB] <devicename>

同时

  • 新的安装项将添加到列表中。系统会定期(每四秒一次)检查列表。如果安装项不再存在,则会从桌面上删除其对应的链接。

如何设置

  1. 将以下脚本复制到一个空文件中,并将其另存为show_usb.py
  2. 创建目录/opt/show_usb(因为我们想以访客帐户运行它):

    sudo mkdir /opt/show_usb
    
  3. 将脚本复制到/opt/show_usb

    sudo cp /path/to/show_usb.py /opt/show_usb
    
  4. 使用以下命令从终端测试运行脚本:

    python3 /opt/show_usb/show_usb.py
    
  5. 如果一切正常,请将其添加到启动应用程序: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. 如何自动运行脚本,特别是在来宾帐户中

要使脚本在访客会话中自动启动:

  1. 检查目录是否/etc/guest-session/skel/.config/autostart存在。如果不存在,则创建它:

    sudo mkdir -p /etc/guest-session/skel/.config/autostart
    
  2. 现在为来宾帐户创建启动启动器:

    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
    

    保存并关闭文件。现在,当您以访客帐户登录时,脚本将运行。

就是这样

笔记

  • 有关如何编辑访客帐户的更多信息可以在这里找到
  • 该脚本仅在安装了新驱动器时才起作用,并且不会给处理器增加任何明显的负载。

相关内容