gpt4 book ai didi

linux - 我的 perl 脚本如何使用 UDev 而不是 HAL 对任意设备使用react?

转载 作者:IT王子 更新时间:2023-10-29 00:45:23 27 4
gpt4 key购买 nike

我想在每次连接时使用一个简单的 Perl 脚本进行一些配置,例如我的蓝牙耳机。我尝试使用 Net::DBus , 但我的 OS/DE (Fedora 17, GNOME3) 不再使用 HAL。

我真的不想为此安装 HAL,那我该怎么办?到目前为止我的想法:

  • (首选):使用 DBus;只需监听 UDev 事件而不是 org.freedesktop.Hal。问题:我找不到相应的服务,org.freedesktop.UDisks 似乎只能监控磁盘(duh)。 UDev 是否​​会为其他设备发送 DBus 消息?如果没有,我可以将其配置为这样做吗?
  • 使用 UDev 规则触发另一个脚本。我喜欢将我的脚本放在一个地方以便轻松过渡到新的操作系统安装,所以我宁愿避免这种情况。
  • 我只使用 Python to listen directly to UDev 会更好吗? ?
  • 或者我可以使用 Perl 来做到这一点吗? CPAN 搜索“udev”没有得到任何有用的信息。

或者我可能完全没有兴趣,而 UDev 甚至不是我所需要的。文档和谷歌都没有真正帮助解决这个问题。如果有人知道如何让 GNOME3 将音频输出切换到默认情况下新连接的蓝牙耳机,那么一个解决方法是,但无论如何我都想学习这样的脚本。

在此先感谢您的指点!
A.

PS:顺便说一下,Google&Co。声称 UDev 获取设备并向 HAL 发送消息,HAL 又通知 DBus。绝对不是这种情况,因为 HAL 甚至不在 Fedora Repos 中。

最佳答案

你可以使用 Udev::FFI (cpanm Udev::FFI)

例如:

use Udev::FFI;

my $udev = Udev::FFI->new() or
die "Can't create udev context.";
my $monitor = $udev->new_monitor() or
die "Can't create udev monitor.";
$monitor->filter_by_subsystem_devtype('usb', 'usb_device');
$monitor->start() or die "Can't start monitor.";

for(;;) {
if(defined(my $device = $monitor->poll())) {
my $action = $device->get_action();
if($action eq 'add') {
#work with $device
...

关于linux - 我的 perl 脚本如何使用 UDev 而不是 HAL 对任意设备使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15131616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com