You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sway exec执行Python音量脚本与CLI执行结果不一致问题

问题排查方案
  • 环境变量缺失:Sway启动时的会话环境变量和手动开终端时不一致,notify-send依赖DBUS_SESSION_BUS_ADDRESS才能和dunst通信。解决办法:

    1. 先在终端执行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%"
      
    2. 或者把环境变量配置写到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:33:10