[英]How to start up xmonad with apps on other workspaces
我正在尝试编写一个 xmonad.hs,它在启动时会在某些工作区上启动一些应用程序。 其中几个应用程序(例如, atop
)将在终端内运行( urxvt
是我的偏好)。
这已经被问过几次了,例如, 这里, 这里,并且在XMonad 常见问题解答中被间接提及。
但是,这些依赖于:
使用spawnOn
从XMonad.Actions.SpawnOn
,其平不起作用(与测试urxvt
,并且还xclock
作为一个简单的例子); 它被发送到当前工作区。
使用spawn prog >> windows $ greedyView <workspace>
,它有点工作,但有主要的时间问题 - 例如,如果您连续运行两个程序,使用不同的工作区,两个程序最终都会在后一个工作区。 FWIW,我尝试使用 threaddelay 来辅助; 它没有任何明显的区别,即使在 spawn 之间有 10 秒的延迟(我记得 threadDelay 以微秒为单位,因此使用了 10000000)。
依赖于对程序使用通用挂钩 - 这意味着每当我启动它们时,它们都会被发送到给定的工作区。 那不是我想要的; 我只是希望它们在启动时放在那里。
相关地,令我惊讶的是 API 不允许我启动一个应用程序,然后给我一个对该应用程序/窗口的引用(可能会超时); 这样我就可以自信地将该应用程序/窗口发送到工作区。
任何帮助将不胜感激。
安装 wmctrl
sudo apt install wmctrl
并创建一个脚本(在此示例中,第二个工作区( -t 1
)上的雷鸟):
#!/bin/sh
(thunderbird &) & sleep 5 &&
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"
要在 wmctrl 上知道您的应用程序名称,您可以通过点击终端来查看它:
wmctrl -l
并将其替换为脚本中的正确名称。
小心使用大写字母(“Thunderbird”而不是“thunderbird”)!!
在 3d 工作区 ( -t 2
) 上使用 Firefox 的其他示例:
#!/bin/sh
(firefox &) & sleep 5 &&
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"
这是在启动时执行的命令:
sh -c "thunderbird & sleep 5 && wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"
使用 Cinnamon 在 Debain 10 上工作。 但应该适用于所有人
您可以通过 startupHook 生成应用程序,然后使用 manageHook 来处理窗口放置。
manageHook 如:
, className =? "deluge" --> doShift ( myWorkspaces !! 3 )
以上实际上会在 Workspace 4 上产生洪水。在我的 startupHook 中,我有
spawnOnce "deluge-gtk" 在启动时启动应用程序。
您可能想要导入 XMonad.Util.SpawnOnce。 doShift 来自默认的 XMonad.ManageHooks 您也可以看看 XMonad.Actions.SpawnOn 但我只使用该模块中的 manageSpawn 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.