Conky 中的 diskio/diskiograph 只能理解物理设备名称?

Conky 中的 diskio/diskiograph 只能理解物理设备名称?

如果是这样,这对现代 Linux 发行版来说可能是一个巨大的打击,因为设备名称通常是任意分配的。因此,如果系统中的 HDD 不超过两个,但端口中有两个 USB 闪存驱动器,则启动后情况可能如下所示:

/dev/sda .. HDD #1
/dev/sdb .. USB flash drive #1
/dev/sdc .. USB flash drive #2
/dev/sdd .. HDD #2

我到处搜索,并尝试了各种技巧,但都.conkyrc无济于事。它似乎不起作用。

我什至想过通过执行系统命令来“创建”conky所需的格式,但即使这样也失败了。在 中bash,这可以通过以下方式实现

$ basename $(readlink /dev/disk/by-label/mydisklabel)

虽然 conky 确实允许执行系统命令,但在 {diskio}/{diskiograph} 选项中,这是不可能的。
所以以下内容将不起作用:

${diskio /dev/${execp basename $(readlink /dev/disk/by-label/mydisklabel)}}

带有 UUID 的变体也不起作用(此处未显示)。
你们中有人曾经设法“教”过这个给 conky 吗?它的用途非常广泛,但令人难以置信的是(与过去的美好时光相比),udev朋友们将不再按特定顺序保留驱动器,而是在每次启动顺序时再次打乱它们,而工具(GKrellM 也好不到哪儿去!)坚持使用物理驱动器/设备名称。

答案1

/dev/disk/by-??要完整使用任何路径,如下所示:

${diskio /dev/disk/by-label/mydisklabel}

您需要拥有conky1.9.1 或更高版本,即conky-ng.从 Fedora 20 开始,它作为软件包提供conky。 Ubuntu 仍在使用旧版本(从 Ubuntu 14.04 开始),因此您需要编译conky-ng.后者对于 Arch Linux 来说也是如此。

Disk IO下面屏幕截图中的行显示它在终端中运行时处理by-label条目。.conkyrcfind .

Conky 按磁盘标签运行

请注意,路径的最后一个字符和右大括号 ( ) 之间不应有空格,}否则conky会抱怨路径未找到。

答案2

查看源代码后,似乎符号链接的名称解析是以相对方式完成的。该程序在应该使用 realpath(3) 的地方使用了 readlink(2)。使用时,如果 conky 的当前工作目录不是,/dev/disk/by-id/wwn-*则解析失败。../../sd?/dev/disk/by-id

要使用标签,您可以使用label:some_disk_label并且它应该可以工作。要获取 by-id/by-uuid,作者必须接受我的拉取请求https://github.com/brndnmtthws/conky/pull/238其中我将 diskio 路径解析方法转换为使用 realpath(3)。

相关内容