安裝 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
    

    儲存並關閉文件。現在,當您以訪客帳戶登入時,腳本將運行。

就是這樣

筆記

  • 有關如何編輯訪客帳戶的更多信息可以在這裡找到
  • 該腳本僅在安裝新驅動器時才起作用,並且不會為處理器增加任何明顯的負載。

相關內容