在GUI上的安装如何“在幕后”进行


12

更新

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

  • 我在其中输入文本的命令行界面
  • 一个图形用户界面 [又名GUI ]:其提供的“窗口”的接口,符号等。

有个名字叫“窗口管理器”的东西。当我使用GNU / Linux时,我确实在X-Window系统上工作。

在此处输入图片说明


原始过帐


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

问题:在GUI中进行安装如何在“幕后”进行?config通常是否有窗口管理器的文件,还是必须单独设置?

我确实了解并使用mount命令,我想了解如何阅读和配置命令,/etc/fstab并知道从何处查看其中的条目及其/etc/mtab含义。


1
同样,AFAIK窗口管理器对此不负责;重要的是在下面运行的桌面环境(的一部分)。例如,我使用Awesome GNOME-GNOME使用Awesome而不是GNOME Shell-并自动安装磁盘。但是如果我只是使用普通的Awesome,他们就不会。老实说,我不太了解您的赏金-@slm的答案似乎很清楚。
凌晨

2
在早期,是自动挂载程序在后台执行这些技巧(使用与root-cli几乎相同的挂载命令)。现在,有自己的子流程可以与GUI集成来完成这项工作。请参阅slm的答案。
Nils

5
“我很难相信,[各种窗口管理器]中的每一个都必须寻找自己的解决方案。” -> 从来没有窗口管理器(WM)执行此操作。这是桌面环境(DE)。至于所有人都必须自己做,那么,他们也都为自己做了很多其他事情。由选择。但是他们不必这样做。例如,GNOME拥有GPL许可证,因此任何其他GPL的DE如果愿意的话都可以使用GNOME部件。
goldilocks

2
@goldilocks,例如Cinnamon和MATE。
13年

2
@strugee:GNOME与GTK(最初用于GIMP)有着密切的历史关系,并且GNU也维护着较低级别的支持库(glib),我相信它会从GNOME和GTK中扩散出来。我猜几乎每个人都可以使用glib,它提供了很多东西,这些东西是“多任务”事件驱动的GUI“根本”的基础(只是:不是实际的图形部分)。我认为GNOME从根本上讲就是glib + gtk +一个windom管理器+一些应用程序。
goldilocks

Answers:


5

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

这里有三个主要玩家,他们之间管理着坐骑:

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

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

    因此,基本上,这就是允许无特权用户安装文件系统的条件。

  • gvfs:在Gnome桌面环境系列(包括Gnome,Mate和Cinnamon)中,(除其他事项外)这是一个守护程序,它将自动安装新连接的驱动器。它通过 FUSE 这样做。我相信(但可能是错误的)KDE系列的等效产品称为KIO

    的主要过程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它来实现基于udisk的卷监视器。udisks但是,它本身依赖udev(请参阅参考资料man 7 udisks)。

因此,基本上(读“可怕的简化”)发生的是,当您连接驱动器时,udev会对其进行检测并向gvfs守护程序发出警报,然后该守护程序会将其安装为FUSE设备。

FUSE udev对于所有桌面环境都是相同的,所不同的是DE守护程序udev将驱动器监视并安装为FUSE文件系统。


1
让D-bus填补udev,gvfs和其他所有组件之间的空白。
Braiam

您可能要更新有关gvfs的信息。他们正在转移到GIO。
Braiam '18

8

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

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

标题为:gvfs的 U&L问答,为什么我要在系统上使用它?,尝试解释什么是GVFS。它可以很好地解释它。但是,我认为您真正要问的是标题为“ 自动安装USB磁盘(它的工作方式) ”的U&L问答。


答案似乎就在HAL…我找到了用于thunar[我使用的]等的解决方案。本文指出了一个方向-谢谢!-但我仍在寻找共同点...
erch 2013年

IIRC DE不需要root,因为它使用FUSE(用户空间中的文件系统)。
奋斗

@strugee猜测DE表示桌面环境,我应该查看FUSE。你有什么暗示吗?
erch

@chirp在Wikipedia上查找FUSE:en.wikipedia.org/wiki/FUSE,IIRC。slm已经回答。答案是桌面环境而不是窗口管理器会自动挂载。
13年

2
@chirp-参见此处:bbs.archlinux.org/viewtopic.php?id=95509。HAL已过时,en.wikipedia.org / wiki / HAL_(software)。UDEV是未来的替代产品:en.wikipedia.org/wiki/Udev
slm

8

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


是!这是我想要的。作为新手,我想问一下从哪里开始,erm:“我从哪里开始”来追踪这种行为(任何提示都会帮助我避免陷入困境;一个起点左右会有很大帮助]
erch 2013年

2
@chirp开始探索udev(7)和/etc/udev/rules.d/*
hildred

5

PolicyKit(或Polkit)是一个应用程序级工具箱,用于定义和处理允许非特权进程与特权进程对话的策略。

它是一个框架,用于集中决策过程,以针对非特权(桌面)应用程序授予对特权操作的访问权限(例如调用Mount()方法)。

身份验证代理用于使会话的用户证明会话的用户确实是用户(通过验证为用户)或管理用户(通过验证为管理员)。

GVFS是一个虚拟文件系统,允许以用户身份挂载本地和远程文件系统以及垃圾回收支持。还提供FUSE支持,允许不使用GIO的应用程序访问GVFS文件系统,但是大多数DE也会通过Policykit进行其他身份验证,例如休眠和关闭计算机以及NetworkManager,因此它们不需要使用保险丝。

它由两部分组成:

  1. 由支持GIO的应用程序加载的共享库;
  2. GVFS本身包含一组守护程序,这些守护程序通过D-Bus与GIO模块相互通信。

需要安装gvfs软件包以及polkit规则的polkit-gnome。确保图形身份验证代理已安装并自动启动。

每个发行版的用于管理特权的配置文件都必须不同。Arch Wiki告诉您在下创建文件/usr/share/polkit-1/rules.d/。在Debian中,它们位于/etc/polkit-1/

来源:Debian的PolicyKit的 || Arch Wiki上的Polkit || Arch Wiki上的GVFS || GNOME Wiki上的GVFS!


您确定GIO代表GObject Introspection吗?如果可以的话,我会以为它会被称为GOI。侏儒人似乎将其称为GI。我还没有找到有关GIO名称的另一种解释,但它似乎与GI 并不相同。
terdon

@terdon这实际上是由strugee(上修订10编辑unix.stackexchange.com/posts/101951/revisions)。删除它...
Teresa e Junior

4

您正在寻找的一个共同点是FUSE GNOME的GVFS,例如,使用的是引擎盖下。1 这是与内核的接口,我相信它对于linux上所有非特权(自动)安装系统都是常见的[但请参见注释]。 各个DE不会创建自己的版本,因为这需要内核修补。

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

除此之外,各种系统的风格可能会有所不同,这与您拥有各种桌面环境的原因相同:它们代表了GUI的外观/方式的不同见解。他们负责用户界面的形式和功能,但是FUSE负责实际的安装和内核级别的工作。请注意,FUSE并不是真正的“自动”部分,它更多地是关于“非特权”部分,但是自动部分非常简单:您要做的只是轮询,例如/dev。我已经编写了一个以这种方式工作的安装应用程序;它只是监视新节点的外观。2 这部分可能是C ++的一百行左右。轻松自在-真正不需要该级别的通用API。

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

2正如hildred观察到的那样,udev回调将是一种更好的,减少黑客攻击的方法。


我猜你的意思是“首页”,错字消失后我将删除此评论;)好的答案,和往常一样!
erch

1
由于我们的答案似乎相互矛盾,所以我做了一些测试。至少在Debian中,没有活动的Polkit代理,用户无法挂载。另外,即使我安装后,模块fuse.ko也不会加载。(我在Wheezy上使用Thunar)
Teresa e Junior

3
@TeresaeJunior:点(我在这里添加了参考),尽管我不认为存在矛盾,因为polkit路由是一个用户空间的窍门-该安装仍然是优先级安装。GVFS维基百科页面上注明“ GVFS可能使用FUSE”,因此我将其设为“ may”而不是“ does”。
goldilocks

1
在GNOME Wiki中:“还有保险丝支持,允许不使用gio的应用程序访问gvfs文件系统。”
Teresa e Junior

1
@TeresaeJunior:是的,所以它们是并发的,FUSE是一个后备。当然,GNOME并不是唯一的DE,但是我敢肯定,其他大多数人都以各种方式使用glib(包括gio)。TBH我从不喜欢自动挂载,所以没有任何轶事。无论如何,保险丝是可能的。
13年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.