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>.

동시에

  • 새 마운트가 목록에 추가됩니다. 주기적으로(4초에 한 번씩) 목록이 확인됩니다. 마운트가 더 이상 존재하지 않으면 해당 링크가 데스크탑에서 제거됩니다.

설정 방법

  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
    

    파일을 저장하고 닫습니다. 이제 게스트 계정으로 로그인하면 스크립트가 실행됩니다.

그게 다야

노트

  • 게스트 계정을 편집하는 방법에 대해 자세히 알아보기여기에서 찾을 수 있습니다.
  • 스크립트는 새 드라이브가 마운트된 경우에만 작동하며 프로세서에 눈에 띄는 로드를 추가하지 않습니다.

관련 정보