GUI 上的安装如何“在幕后”工作

GUI 上的安装如何“在幕后”工作

更新

如果我错了请纠正我:在我的计算机上工作时,使用名为 Debian 的 GNU/Linux 发行版,我知道输入命令、启动应用程序、打开文件等的两种方法:

  • A命令行界面我输入文本的地方
  • A图形用户界面[又名图形用户界面]:提供“窗口”、符号等的界面。

有一个名为“窗口管理器”的东西。当我使用 GNU/Linux 时,我会致力于X窗口系统[据我所知]。

在此输入图像描述


原始帖子


情况:我禁用了 USB 记忆棒的自动挂载/etc/fstab[例如/dev/sdb1]。安装需要root或至少一个sudo条目在命令行上,但不在窗口管理器中(!)。我的意思不是automount,我的意思是在窗口管理器中“单击符号”可以毫无问题地在 GUI 上打开设备,而在 CLI 上必须是 root。

问题:在 GUI 中安装是如何“在幕后”工作的?是否有一个config通用的窗口管理器文件,或者是否必须单独设置该文件?

我确实理解和使用mount命令,我认为了解如何阅读和配置/etc/fstab并知道在哪里查看那里的条目和/etc/mtab含义。

答案1

这取决于您的窗口环境(GNOME/KDE/等),但例如在 GNOME 中,您将看到运行名为gvfs-*-volume-monitor.这些守护进程负责在桌面环境运行时挂载设备,它们与 无关/etc/fstab,完全独立运行。

就配置文件而言,有一些与此相关的文件位于运行 DE 的用户主目录中$HOME/.local/share/gvfs-metadata

本 U&L 问答题为:什么是 gvfs?为什么我应该在我的系统上使用它?,试图解释什么是 GVFS。它很好地解释了这一点。但我认为你真正想问的问题可以通过这个 U&L 问答来解决,标题为:自动挂载U盘(工作原理)

答案2

简单的答案是他们作弊。他们不使用fstab.他们通常使用udev挂钩来捕获插入事件,将磁盘手动挂载为root,这可能会传递给dbus文件管理器以通知您有新磁盘,或者他们可能会使用suid实用程序而不是dbus卸载。不幸的是,没有标准的配置选项,并且由于桌面运动相信隐藏复杂性,因此他们不会在用户文档中记录这一点,仅在开发人员文档中记录,并且他们假设单个用户系统,因此 USB 驱动器仅适用于第一个登录 X 服务器的用户。

答案3

这是我对情况的理解,但我不是专家,所以它的技术性不如其他答案。这是我使用这些系统多年后的理解,我没有详细研究过它们。

这里有三位主要玩家,他们管理坐骑:

  • FUSE:这是一切的中心,正如其中所述维基百科页面:

    用户空间文件系统 (FUSE) 是类 Unix 计算机操作系统的一种操作系统机制,允许非特权用户创建自己的文件系统,而无需编辑内核代码。这是通过在用户空间运行文件系统代码来实现的,而 FUSE 模块仅提供到实际内核接口的“桥梁”。

    因此,基本上,这就是允许非特权用户挂载文件系统的原因。

  • gvfs:在 Gnome 系列桌面环境(包括 Gnome、Mate、Cinnamon)中,这是(除其他外)一个将自动安装新连接的驱动器的守护进程。确实如此通过保险丝。我相信(但很可能是错误的)KDE 系列的等效项称为克钦独立组织

    主要流程gvfs有(摘自man gvfs):

    • gvfsd - 主要的 gvfs 守护进程
    • gvfs-fuse-daemon - 将 gvfs 安装为熔断文件系统
    • gvfsd-metadata - 写入 gvfs 元数据
  • udev:这是一个检测新设备并允许您在连接时运行脚本/命令的系统。例如,它udev检测到一个新屏幕并可以在其上镜像您的桌面:

    udev 是 Linux 内核的设备管理器。它主要管理 /dev 中的设备节点。它是 devfs 和 hotplug 的后继者,这意味着它在添加/删除设备时处理 /dev 目录和所有用户空间操作,包括固件加载。

    具体来说,gvfs似乎可以通过gvfs-udisks2-volume-monitor基于 udisks 的音量监视器来工作。udisks然而,它本身依赖于udev(参见man 7 udisks)。

因此,基本上(阅读“可怕的简化”)发生的情况是,当您连接驱动器时,udev检测它并警告gvfs守护程序,然后守护程序将其安装为 FUSE 设备。

FUSEudev对于所有桌面环境都是相同的,变化的是 DE 守护进程,该守护进程将udev驱动器作为 FUSE 文件系统进行监视和安装。

答案4

您正在寻找的一个常见元素是保险丝, 例如,GNOME 的 gvfs 在幕后就使用了它。1 这是与内核的接口,相信大家都通用无特权的在 Linux 上(自动)安装系统[但请参阅评论]。 各个 DE 不会创建自己的版本,因为这需要内核修补。

该主页链接实际上已经过时了,因为如此处所述,FUSE 几年前成为官方内核的一部分,但它确实描述了该项目的起源和目的(它不仅仅是为了非特权挂载)。

不同系统的风格可能会有所不同,这与您拥有不同桌面环境的原因相同:它们代表了 GUI 应该如何/什么的不同愿景。他们负责用户界面的形式和功能,但 FUSE 负责实际的安装和内核级别的工作。请注意,FUSE 并不真正执行“自动”部分,它更多地涉及“非特权”部分,但自动部分非常简单:您所要做的就是轮询,例如,/dev。我编写了一个以这种方式工作的安装应用程序;它只是监视新节点的出现。2 这部分可能是一百行左右的 C++ 代码。简单易行——在该级别上并不真正需要通用 API。

1或者可以,如果它正在执行真正的非特权安装。特蕾莎的答案可能涵盖允许访问普通坐骑的新方法。

2正如 hildred 观察到的,udev 回调将是一种更好、更少 hack 的方法。

相关内容