AwesomeWM全屏问题:显示器切换异常与视频无法全屏
问题1:全屏后窗口切换到左侧非主显示器
原因分析
你的全局窗口规则中设置了screen = awful.screen.preferred,该函数默认优先选择编号较小的屏幕(即你左侧的HDMI-0显示器),导致全屏时窗口被强制转移到该屏幕。同时启动时的xrandr命令未明确指定主屏幕,进一步加剧了这个问题。
解决步骤
修正xrandr命令,明确主屏幕
假设右侧DP-4是你的主显示器,修改启动时的xrandr命令,给DP-4添加--primary参数:xrandr --output HDMI-0 --auto --mode 1920x1080 --rate 60 --left-of DP-4 --output DP-4 --auto --mode 1920x1080 --rate 144 --primary修改全屏快捷键逻辑,绑定到当前屏幕
调整全屏快捷键的回调函数,确保窗口全屏时保留在当前所在屏幕:awful.key({ modkey }, "f", function (c) c.fullscreen = not c.fullscreen if c.fullscreen then c.screen = awful.screen.focused() -- 强制绑定到当前聚焦的屏幕 end c:raise() end, {description = "toggle fullscreen", group = "client"} ),调整全局窗口规则的screen属性
将全局规则中的screen = awful.screen.preferred替换为screen = awful.screen.focused(),让新窗口默认打开在当前聚焦的屏幕:{ rule = { }, properties = { border_width = 3, border_color = beautiful.border_normal, focus = awful.client.focus.filter, raise = true, keys = clientkeys, buttons = clientbuttons, screen = awful.screen.focused(), -- 替换原有属性 placement = awful.placement.no_overlap+awful.placement.no_offscreen } },
问题2:Chromium/LibreWolf视频全屏立即退出
原因分析
这类问题通常是浏览器的全屏机制与AwesomeWM的窗口布局规则冲突,尤其是placement = awful.placement.no_overlap+awful.placement.no_offscreen规则会在窗口全屏时强制调整位置,触发浏览器的全屏退出逻辑。
解决步骤
为浏览器添加专属规则,禁用全屏时的placement限制
在awful.rules.rules中添加针对Chromium和LibreWolf的规则,当它们进入全屏时临时跳过placement检查:-- 修复浏览器视频全屏退出问题 { rule_any = { class = { "Chromium", "LibreWolf" } }, callback = function(c) c:connect_signal("property::fullscreen", function() if c.fullscreen then c.placement = nil -- 临时禁用placement规则 else c.placement = awful.placement.no_overlap+awful.placement.no_offscreen -- 恢复规则 end end) end },禁用浏览器硬件加速(可选)
如果上述方法无效,可尝试在浏览器设置中关闭硬件加速:- Chromium:设置 → 系统 → 关闭“使用硬件加速模式(如果可用)”
- LibreWolf:设置 → 常规 → 性能 → 关闭“使用硬件加速模式”
重启浏览器后测试全屏功能。
调整全屏快捷键的额外参数
在全屏函数中先取消窗口最大化状态,避免与全屏模式冲突:awful.key({ modkey }, "f", function (c) c.maximized = false -- 先取消最大化,避免状态冲突 c.fullscreen = not c.fullscreen if c.fullscreen then c.screen = awful.screen.focused() end c:raise() end, {description = "toggle fullscreen", group = "client"} ),
内容的提问来源于stack exchange,提问作者Peter W

