【问题标题】:Detecting CDROM media removal/insertion in Linux在 Linux 中检测 CDROM 介质移除/插入
【发布时间】:2011-07-03 23:52:08
【问题描述】:

当用户在 Linux 平台上插入或移除 CD 时,是否有一种干净的方法来检测或接收事件?

【问题讨论】:

  • 用什么编程语言?

标签: linux device cd-rom


【解决方案1】:

我能找到的最好方法是 Halevt。 Halevt 显然是比直接使用 HAL 更高级别的抽象。它使用基于 XML 的配置文件,您可能喜欢也可能不喜欢。配置文件属性文档有些欠缺。此处列出了所有受支持的属性:

http://www.marcuscom.com/hal-spec/hal-spec.html

另外,Halevt 的链接:http://www.nongnu.org/halevt/

【讨论】:

    【解决方案2】:

    传统上对此有HAL(硬件抽象层),但网页上说

    HAL 处于维护模式 - 没有新的 添加了功能。所有的未来 开发重点是udisks、UPower 和堆栈的其他部分。看 软件/DeviceKit 了解更多 信息。

    以及 DeviceKit 页面列表

    udisks,一个处理存储设备的D-Bus接口

    所以udisks 应该是你想要的。

    【讨论】:

    • udisks,如果可用,绝对是要走的路。它呈现为一个 DBus 接口(可通过大多数合理的编程语言访问),并有一个命令行工具(udisks),几乎可以用其他任何东西进行解析。
    【解决方案3】:

    Udev 监控硬件并将事件转发到 dbus。你只需要一些 dbus 监听器。使用 dbus-monitor 工具进行的快速检查在我的系统中显示了这一点:

    dbus-monitor --system

    signal sender=:1.15 -> dest=(null destination) serial=144 path=/org/freedesktop/UDisks; interface=org.freedesktop.UDisks; member=DeviceChanged
       object path "/org/freedesktop/UDisks/devices/sr0"
    

    这是来自 Udisks 的 DeviceChanged 事件,包含设备路径。

    因此,无论您想要什么支持 dbus 绑定的编程语言,您都可以监听那些(系统总线)事件。

    【讨论】:

    • udev 将事件转发到 hotplug。您显然已将热插拔附加到 dbus,但并非所有 linux 发行版都如此。
    • @Ben 不,最新的 udev 转发到 dbus,我的系统上没有热插拔。这适用于最新的 udev/opendesktop 安装。这就是我安装的Gentoo 所拥有的。但确实其他发行版可能还没有这个。
    • 这很有趣,我没有看到 udev 对 dbus 的依赖,或者任何 USE 标志。必须是间接依赖。
    • @Ben @Keith:udisks 不是 udev 的一部分。相反,udisks 是一种 D-Bus 服务,用于管理磁盘,包括处理来自 udev 的信息。
    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多