插入 USB 时默认打开终端

插入 USB 时默认打开终端

默认情况下,插入可移动介质后,Ubuntu 将在挂载目录中打开 Nautilus。我禁用了此功能,但想知道是否可以将 Gnome 配置为在挂载目录中打开终端。

编辑:我正在使用 Ubuntu 15.10。

答案1

编辑版本这个脚本完成此工作。当连接(任何)USB 设备时,将gnome-terminal在其(根)目录中打开。

在示例中,当usb连接了 14.04 启动闪存驱动器时:

在此处输入图片描述

剧本

#!/usr/bin/env python3
import os
import subprocess
import time

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):
    command = "find /dev/disk -ls | grep /"+disk
    output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    if "usb" in output:
        return True
    else:
        return False

done = []
while True:
    mounted = get_mountedlist()
    new_paths = [dev for dev in mounted 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:
        os.chdir(item[1])
        subprocess.Popen(["gnome-terminal"])
    done = mounted
    time.sleep(4)

如何使用

  • 将脚本复制到一个空文件中,另存为open_usb.py
  • 使用以下命令测试运行脚本:

    python3 /path/to/open_usb.py
    
  • 如果一切正常,将其添加到启动应用程序:Dash>启动应用程序>添加命令:

    python3 /path/to/open_usb.py
    

笔记

  • 我在 Unity (14.04) 上测试过它,但它不太可能在任何Ubuntu 版本,只要有默认配置(包括python3
  • 该脚本每四秒仅运行一次非常简单且轻量级的检查。在我的测试中,我无法确定任何额外的处理器负载。



编辑

正如评论中提到的那样,尽管脚本可以正常工作,但是当您安全地删除usb设备:给出警告,提示该卷已被脚本“占用”。

原因是脚本cd-s 进入了卷的目录,然后在卷的根目录中打开终端。

解决方案

解决方案很简单;在设备根目录中打开终端后,让脚本再次离开目录usb。在以下版本中,此问题已得到修复:

#!/usr/bin/env python3
import os
import subprocess
import time
home = os.environ["HOME"]

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):
    command = "find /dev/disk -ls | grep /"+disk
    output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
    if "usb" in output:
        return True
    else:
        return False

done = []
while True:
    mounted = get_mountedlist()
    new_paths = [dev for dev in mounted 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:
        os.chdir(item[1])
        subprocess.call(["gnome-terminal"])
        os.chdir(home)
    done = mounted
    time.sleep(4)

相关内容