如何让 hal 在 ubuntu 服务器上运行?

如何让 hal 在 ubuntu 服务器上运行?

我想尝试创建一个非常简化的服务器安装,它会自动安装其内部 SATA 磁盘。因此,我想到使用 HAL 作为解决方案。据我所知,HAL 只是一个守护进程,用于“监听”硬件更改,如果更改与 .fdi 配置文件匹配,则通过 dbus 将更改广播到其客户端。

在服务器安装中我可以使用哪个客户端?我读到过关于gnome-volume-manager这种可能性的文章,但据我所知,它想要打开一个图形显示,而我在服务器安装中不需要它(即使它只是一个软件显示)。

有任何进一步指导的提示吗?或者是否有任何能够执行 HAL 事件的替代 dbus 客户端?


我让它工作了,但没有 hal/devicekit/gnome。我使用基本的 udev 规则和 RUN 命令来安装磁盘

# /etc/udev/rules.d/local.rules
# /etc/udev/rules.d/89-local.rules
# ADD rule: if we have a valid ID_FS_USAGE, and it's a filesystem with a UUID, mkdir and mount

ENV{ID_FS_USAGE}=="filesystem", ENV{ID_FS_UUID_ENC}=="?*", ACTION=="add", RUN="/bin/mkdir -p /media/$env{ID_FS_UUID_ENC}" RUN+="/bin/mount -t auto /dev/%k /media/$env{ID_FS_UUID_ENC}" RUN+="/media/$env{ID_FS_UUID_ENC}/autostart.sh"

在 Ubuntu 上,将其放入文件中/lib/udev/rules.d/89-local.rules。在 Debian 上,它应该在 中/etc/udev/rules.d。我还添加了在启动期间运行脚本的可能性,autostart.sh例如启动仅在特定磁盘上可用的服务

无需用户登录,在启动时自动将外部驱动器安装到 /media/LABEL?有答案

答案1

HAL 是一个通信和消息传递层——老实说,我不确定 DBus 在哪里结束,HAL 在哪里开始。它主要用作 DBus 和桌面环境之间的层,但它没有任何需要 DE 操作的 GUI 组件。

对于无头服务器安装,您需要使用 HALevt。HAlevt 是一个位于 HAL 之上的守护进程,就像 Gnome DE 中的 Gnome-VFS 一样,它可以响应硬件事件。它可以配置为作为系统范围的守护进程或作为单个用户运行。请参阅我之前对一个问题的回答关于使用 HALevt 在无头服务器上为 CD 和 USB 驱动器提供类似 Gnome-VFS 的自动挂载。这应该会为您提供基本的操作方法,尽管您的情况可能需要进行一些调整。

whitequark 的回答-- 通过以下方式设置你的普通坐骑/etc/fstab-- 如果您的系统内部驱动器未设置为热插拔,则更好。使用 HALevt 安装静态内部磁盘是可行的,但比需要的更复杂。但如果您确实有热插拔托架并且想要使用它们,使用 HALevt 进行自动安装可能是您的一个不错的选择。

答案2

内部 SATA 驱动器不能热插拔即在服务器开机时插入。因此,您需要做的就是在开机时安装它们。为此,您只需将它们放在 /etc/fstab 中:

  1. 适用于所有文件系统的通用方法:
    添加一行,例如/dev/sdXN /path/to/mountpoint auto defaults 0 2/dev/sdXN 是您的设备伪文件。
  2. Ext2/Ext3 专用方法:
    首先,确定运行系统中设备文件的名称。其次,通过tune2fs -l /dev/sdXN | grep UUID在 root 下运行获取其 UUID,当然再次用您的设备替换 sdXN。之后,您可以像我在上一段中所做的那样向 fstab 添加一行,但将第一个值 ( /dev/sdXN) 替换为 ( UUID=fa62e245-04bd-4cb2-a17f-5c7ee19e3574)。当然,您需要用您的 UUID 替换我的 UUID。此方法的优点是,如果您添加或删除其他 SATA 驱动器,挂载点将不受内核检测这些设备的顺序的影响。

此外,任何服务器都不需要 HAL;它只是一个纯粹的桌面实用程序,用于允许非特权用户执行一些特权操作,并且仅通过 D-Bus。您可能希望使用更适合服务器环境的控制台实用程序。

相关内容