无法从 i3 脚本禁用全屏

Too*_*rot 5 chrome i3

我使用 i3 绑定来执行脚本

#!/bin/sh
i3-msg workspace web
/bin/chromium --start-fullscreen
sleep 5
i3-msg fullscreen disable
Run Code Online (Sandbox Code Playgroud)

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

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

Ada*_*hon 3

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

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

此外,我建议向i3-msg. 这样它就可以在任何Chromium窗口上工作,而不仅仅是当前聚焦的窗口,这实际上可能不是所需的Chromium窗口(显然这可能不是所需的行为,以防您希望某些Chromium窗口全屏显示)。

#!/bin/sh
i3-msg workspace web
/bin/chromium --start-fullscreen &
sleep 2
i3-msg '[instance="^chromium$"] fullscreen disable'
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望Chromium窗口始终出现在工作区“web”上,您可以在i3assign配置中使用和for_window配置指令来完成此工作:

assign [instance="^chromium$"] web
for_window [instance="^chromium$"] exec "sh -c 'sleep 2; i3-msg \[instance=chromium\] fullscreen disable'"
Run Code Online (Sandbox Code Playgroud)

这样,您不再需要脚本,每次运行chromium i3时都会将其放在“web”上,两秒钟后窗口将退出全屏。
注意:虽然理论上可以fullscreen disable直接使用for_window,但它不适用于Chromium,因为窗口实际上是以全屏启动的。Chromium能够非常快地实现全屏显示;不幸的是,i3运行时速度更快for_window。因此,i3会在Chromium尝试启用全屏之前禁用全屏。sleep这就是为什么运行和i3-msgvia绕道exec是必要的。