如何在i3-wm中实现Emacs窗口透明?配置无效求助
我之前折腾i3+Emacs透明的时候踩过不少坑,结合你的情况——Mate桌面下正常、Gnome Terminal在i3里能透明、用feh设背景,给你几个实用的排查和解决方向:
1. 调整Emacs的透明配置方式
有些单帧的透明设置可能在i3下无法覆盖所有场景,试试把透明配置绑定到新建frame的钩子上,确保所有Emacs窗口都能生效:
(add-hook 'after-make-frame-functions (lambda (frame) ;; 第一个数值是窗口不透明度,第二个是背景不透明度,按需调整 (set-frame-parameter frame 'alpha '(90 . 90))))
另外,如果你用的是较新版本的Emacs,试试强制用GTK后端启动:emacs -mm,再看透明效果是否生效。
2. 检查i3的窗口规则配置
打开你的i3配置文件(通常是~/.config/i3/config),看看有没有给Emacs设置了强制不透明的规则,比如:
for_window [class="Emacs"] opacity 1.0
如果有,把1.0改成你需要的透明度(比如0.9),或者直接删掉这行,然后重启i3(Mod+Shift+C重载配置)再测试。
3. 确保合成器正常运行
i3本身没有内置合成器,而窗口透明依赖合成器支持。虽然Gnome Terminal能透明,但可能是它自身的透明实现和Emacs不同。试试启动picom(现在主流的合成器,替代旧的compton):
picom -b
如果启动后Emacs透明生效了,可以把picom -b加到i3的启动脚本里(比如~/.config/i3/config里加exec --no-startup-id picom -b),确保每次登录i3都自动启动合成器。
如果picom启动后还是有问题,可以试试调整它的后端设置:在~/.config/picom.conf里修改:
backend = "xrender"; # 或者试试glx后端 # backend = "glx";
4. 强制Emacs使用X11后端(针对Wayland环境)
如果你是在Wayland下运行i3(比如用i3-wlroots),而Emacs默认用了Wayland后端,可能会导致透明失效。试试强制用X11后端启动Emacs:
GDK_BACKEND=x11 emacs
如果生效了,可以把这个环境变量加到你的shell配置里(比如~/.bashrc或~/.zshrc),或者在i3的启动规则里设置:
exec --no-startup-id GDK_BACKEND=x11 emacs
内容的提问来源于stack exchange,提问作者Inspired_Blue

