Sway exec执行Python音量脚本与CLI执行结果不一致问题
问题排查方案
环境变量缺失:Sway启动时的会话环境变量和手动开终端时不一致,
notify-send依赖DBUS_SESSION_BUS_ADDRESS才能和dunst通信。解决办法:- 先在终端执行
echo $DBUS_SESSION_BUS_ADDRESS拿到当前有效地址,然后把这个值加到Sway的按键绑定命令里,比如:bindsym XF86AudioRaiseVolume exec "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /home/theo/Repos/volumebar-dunst/bin/python /home/theo/Repos/volumebar-dunst/main.py raise 10%" - 或者把环境变量配置写到Sway的启动文件里,比如新建
~/.config/sway/config.d/env.conf,添加:export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
- 先在终端执行
Python环境/命令路径问题:Sway的PATH可能没包含脚本里的Python路径,或者脚本里调用的
notify-send没写绝对路径导致找不到。可以把脚本里的notify-send改成绝对路径/usr/bin/notify-send,同时确保绑定命令里的Python路径是完整绝对路径。脚本错误处理缺失:脚本里的
cli_command函数如果没捕获命令执行的异常,可能在amixer执行后因为某个错误直接崩溃。可以给脚本加日志输出定位问题:import logging logging.basicConfig(filename='/tmp/volumebar_debug.log', level=logging.DEBUG) # 执行amixer后记录日志 result = cli_command(f'amixer set Master {args[2]}+') logging.debug(f"amixer执行结果: {result},返回码: {result.returncode}") # 调用通知前也加日志 logging.debug("准备发送音量通知")触发按键绑定后查看
/tmp/volumebar_debug.log里的错误信息。Wayland通知适配问题:Wayland环境下
notify-send可能不如dunst自带的dunstify适配性好,试试把脚本里的notify-send替换成dunstify。
内容的提问来源于stack exchange,提问作者tufo
相关产品推荐
相关产品推荐

