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

从Debian9转Ubuntu18.04后Conky脚本报错:Bad file descriptor

解决Ubuntu 18.04下Conky自定义命令报write error: Bad file descriptor的问题

我之前也碰到过类似的跨发行版Conky兼容坑,结合你的场景(Debian 9正常运行,换到Ubuntu 18.04 + Conky 1.10.9就出问题),可以从这几个方向逐一排查修复:

1. 调整Conky窗口配置参数

Ubuntu 18.04默认的GNOME桌面环境和Conky的窗口交互逻辑和Debian 9有差异,很容易导致子进程的文件描述符出现异常。你可以修改Conky配置文件里的own_window相关设置试试:

own_window yes
own_window_type normal  # 也可以尝试override或desktop类型
own_window_argb_visual yes
own_window_transparent yes

修改后重启Conky,看看是否能解决问题。

2. 强制处理命令的错误输出

Conky捕获命令输出时,如果子进程的stderr没有被正确处理,就会触发文件描述符错误。你可以把自定义命令的stderr重定向到stdout或者/dev/null,比如:

  • 把原本的exec cat /path/to/your/file改成exec cat /path/to/your/file 2>&1
  • 或者更彻底屏蔽错误输出:exec cat /path/to/your/file 2>/dev/null

这个方法对cut、grep这类可能产生错误输出的命令尤其有效。

3. 检查AppArmor限制

Ubuntu默认会用AppArmor对系统程序做权限管控,Conky可能被限制了某些文件描述符操作。可以临时禁用Conky的AppArmor规则测试:

sudo aa-disable /usr/bin/conky

之后重启Conky,如果问题消失,说明是AppArmor的限制导致的,你可以编辑/etc/apparmor.d/usr.bin.conky文件,添加必要的权限规则(比如允许读取你要操作的文件,或者允许子进程正常输出)。

4. 替换exec为execi(或execpi)

Conky的exec和execi在执行命令的方式上有细微差异:execi是间隔指定秒数执行命令,它的子进程文件描述符处理逻辑更稳定。比如把:

exec cat /path/to/your/file

改成:

execi 5 cat /path/to/your/file  # 每5秒执行一次,可根据需求调整时间

5. 确认Conky的运行权限

确保你是用普通用户身份启动Conky,和终端里执行命令的用户一致。如果之前用sudo运行过Conky,可能会留下权限异常的缓存文件,试试删除~/.cache/conky/下的文件后再重启Conky。


内容的提问来源于stack exchange,提问作者Benjamin Barrois

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:18