无法从 i3 脚本禁用全屏

无法从 i3 脚本禁用全屏

我使用 i3 绑定来执行脚本

#!/bin/sh
i3-msg workspace web
/bin/chromium --start-fullscreen
sleep 5
i3-msg fullscreen disable

最后两行是禁用全屏(我不知道是否需要睡眠)。 i3 全屏是作为 chromium 参数的副作用而启用的(其目的只是隐藏地址栏等)。但由于某种原因,它不起作用,全屏未禁用。仅当我使用绑定 $mod+f 手动切换全屏时,它才会被禁用。为什么脚本无法做到这一点?

(我想禁用全屏的原因是,当我使用 chromium-vim 在外部编辑文本字段时,gvim 在禁用全屏之前不会显示。)

答案1

原因很简单,当你运行时chromium它不会返回,直到完成,即关闭后。所以sleepandi3-msg只会在窗口消失后运行。

要解决这个问题,您只需chromium在后台启动,这可以通过附加&到命令来完成。是sleep必需的,没有它i3-msg可能会在之前运行甚至初始化了它的窗口。五秒可能有点长,但这实际上取决于多快在您的系统上打开。

此外,我建议向i3-msg.这样它就可以在任何窗口而不仅仅是当前聚焦的窗口,这实际上可能不是所需的窗口(显然这可能不是一个理想的行为,如果你想要一些窗口全屏)。

#!/bin/sh
i3-msg workspace web
/bin/chromium --start-fullscreen &
sleep 2
i3-msg '[instance="^chromium$"] fullscreen disable'

或者, 如果你想窗口始终出现在工作区“web”上,您可以在您的工作区中使用assignfor_window配置指令i3配置来完成工作:

assign [instance="^chromium$"] web
for_window [instance="^chromium$"] exec "sh -c 'sleep 2; i3-msg \[instance=chromium\] fullscreen disable'"

这样,您不再需要脚本,并且每次运行时chromium i3会将其放在“网络”上,两秒钟后窗口将退出全屏。
笔记:虽然理论上可以fullscreen disable直接使用 with for_window,但它不适用于因为窗口实际上是全屏启动的。只需非常快地启用全屏;很遗憾i3跑步时甚至更快for_window。所以i3之前会禁用全屏甚至尝试启用它。这就是为什么运行sleepi3-msgvia绕道exec是必要的。

相关内容