You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何阻止Wine运行程序时产生的Compiz错误日志在journalctl中刷屏

如何阻止Wine运行程序时产生的Compiz错误日志在journalctl中刷屏

我完全懂这种日志刷屏的痛苦——明明程序能正常用,但日志疯狂占磁盘空间,旧日志还被快速挤掉,太闹心了。针对你在Ubuntu 20.04上用Wine 8.21 Staging跑钉钉时遇到的Compiz+Wine日志刷屏问题,结合你的环境(Compiz 0.9.14.1),给你几个精准的解决办法:

方法1:调低Wine日志级别,屏蔽fixme类提示

你日志里大量的0078:fixme:icon:...08ac:fixme:gdiplus:...这类条目,都是Wine的未实现功能提示(fixme),属于非致命警告,完全没必要记录到journal里。我们可以通过调整WINEDEBUG环境变量,只保留错误级别的日志:

临时生效(单次运行程序)

启动钉钉时直接指定环境变量:

WINEDEBUG=-all,+err wine /path/to/your/DingTalk.exe
  • -all:关闭所有Wine日志
  • +err:仅保留错误级别的日志输出

永久生效(所有Wine程序)

编辑你的bash配置文件(比如~/.bashrc),添加一行:

export WINEDEBUG=-all,+err

保存后执行source ~/.bashrc让配置生效,之后所有Wine程序都会默认用这个日志级别。

方法2:过滤Compiz本身的错误日志

针对那条反复出现的Compiz错误:

ERROR 2023-12-09 15:11:22 unity.decoration.shape DecorationsShape.cpp:78 Failed to get shape rectangles

我们可以直接通过systemd-journald的过滤规则,让journald彻底忽略这条日志:

  1. 创建journald的自定义配置文件:
sudo nano /etc/systemd/journald.conf.d/filter-compiz-wine.conf
  1. 写入以下内容:
[Journal]
FilterPattern=NOT "unity.decoration.shape DecorationsShape.cpp:78 Failed to get shape rectangles"
  1. 重启journald服务使配置生效:
sudo systemctl restart systemd-journald

这样这条烦人的Compiz错误就不会再被记录到journal里了。

方法3:用Systemd Service彻底隔离Wine程序的日志

如果想一劳永逸,让这个Wine程序的所有输出都不进入journal,可以创建一个Systemd用户服务来管理钉钉:

  1. 创建服务文件:
nano ~/.config/systemd/user/dingtalk.service
  1. 写入以下内容(注意替换钉钉的实际路径):
[Unit]
Description=DingTalk Launched via Wine

[Service]
ExecStart=/usr/bin/wine /path/to/your/DingTalk.exe
# 把标准输出和错误输出重定向到/dev/null
StandardOutput=null
StandardError=null
# 同时结合Wine日志级别限制
Environment=WINEDEBUG=-all,+err
# 可选:程序崩溃时自动重启
Restart=on-failure

[Install]
WantedBy=default.target
  1. 重载Systemd配置并启动服务:
systemctl --user daemon-reload
systemctl --user start dingtalk.service
  1. (可选)设置开机自启:
systemctl --user enable dingtalk.service

这种方式会把Wine程序的所有输出直接丢弃,完全不会污染journal日志。

验证效果

设置完成后,启动钉钉,然后运行journalctl -f实时监控日志,你会发现之前刷屏的那些fixme和Compiz错误都消失了,journal终于清净了!

备注:内容来源于stack exchange,提问作者Jerry Ding

火山引擎 最新活动