데스크탑이나 시스템 게스트 계정의 $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>
.
동시에
- 새 마운트가 목록에 추가됩니다. 주기적으로(4초에 한 번씩) 목록이 확인됩니다. 마운트가 더 이상 존재하지 않으면 해당 링크가 데스크탑에서 제거됩니다.
설정 방법
- 아래 스크립트를 빈 파일에 복사하고 다른 이름으로 저장하세요.
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
파일을 저장하고 닫습니다. 이제 게스트 계정으로 로그인하면 스크립트가 실행됩니다.
그게 다야
노트
- 게스트 계정을 편집하는 방법에 대해 자세히 알아보기여기에서 찾을 수 있습니다.
- 스크립트는 새 드라이브가 마운트된 경우에만 작동하며 프로세서에 눈에 띄는 로드를 추가하지 않습니다.