我有几个脚本,我希望 udev 在插入/拔出显示器时运行。我已经添加了额外的 udev 规则,但我不知道如何添加我希望 udev 运行的脚本。
我尝试使用以下命令将 udev 指向 nix 之外的脚本:
RUN+="/home/myUser/scriptName.sh"
重建失败并出现错误:
/home/myUser/scriptName.sh is called in udev rules but not installed by udev
那么如何通过 udev 安装脚本呢?
我是否必须为脚本创建 nix 表达式并将它们与其他所有内容一起安装?
谢谢。
答案1
免责声明
这是一个不纯粹的解决方案,这意味着configuration.nix
仅凭这一点无法让您完全实现目标。我强烈反对在服务器上使用它。
另一方面,我在我的笔记本电脑上使用这种方法,我仍然需要从其他地方获取我的点文件,提取工作存储库,恢复备份等,所以我有一些东西无论如何都不能单独用 nix 表达式来描述。
答案
configuration.nix
这是我关注的部分udev
,它负责在笔记本电脑连接坞站时设置外部显示器。
services.udev = {
extraRules = ''
SUBSYSTEM=="usb", ACTION=="add|remove", ENV{ID_VENDOR}=="Lenovo", ENV{ID_MODEL}=="Lenovo_ThinkPad_Dock", RUN+="${pkgs.bash}/bin/bash /home/hoodoo/.local/bin/dock_handler.sh"
'';
};
这里欺骗 nix 解释器的是这样一个事实:我调用了正确安装的东西并将我的脚本作为参数走私(并且它不会很快有能力找出所有可能命令的所有可能选项)。