通常,在 Ubuntu 10.04 Netbook 中,如果我想打开一个程序,通常会从这里开始:(
一个打开的程序)
更改为:
使用程序启动器启动另一个程序http://a.yfrog.com/img251/3201/workspace2002thumb.png
(使用打开另一个程序铜金矿)
更改为:
我怎样才能改变行为,以便在启动程序后,焦点重新回到(并停留在)原始程序上,或者换句话说,使所有新窗口在后台打开?
我正在使用 Ubuntu 10.04 Netbook 和 Mutter,但在使用 Metacity 时也会发生这种情况。
答案1
编辑:事实上,有一个GNOME 中的错误这样你就能很轻松地实现你想要的效果。你只需要设置一个窗口,任何窗口,设置为 Always On Top。随后打开的所有窗口都将在后台运行,不会获得焦点。我建议您将终端设计得尽可能小,将其放在不妨碍的地方,例如角落里,然后设置 Always On Top。
请注意,此修复很容易实现,但实际上是一种混乱的解决方法,而不是真正的解决方案,并且一旦链接的错误被修复就会停止工作(尽管这可能需要 2 个以上的发布周期)。
Mutter 有一个 gconf 键,可以防止应用程序窃取焦点:
启动 gconf-editor,导航到应用程序 --> metacity --> 常规并将“焦点新窗口”设置为严格。
您可能会发现这还不够,部分或所有应用仍以焦点启动。至少上述操作将阻止从终端启动的应用窃取焦点,因此您可以通过执行以下操作来解决这个问题:
通过修改菜单项和面板按钮的“命令”字段,假设菜单项和面板按钮是从终端启动的。
因此firefox
变成
gnome-terminal -e firefox
有些应用程序不会立即返回提示,因此需要以脚本的形式执行进一步的操作。
命令是gnome-terminal -e "/bin/bglaunch.sh firefox"
其中 /bin/bglaunch.sh 是以下脚本,它在后台启动应用程序:
#!/bin/bash
nohup $1 >/dev/null &
答案2
从 Ubuntu 软件中心安装“高级桌面效果设置(ccsm)”。
安装后,系统->首选项菜单中会出现一个名为“CompizConfig 设置管理器”的新菜单项。单击它并导航到常规->常规选项->聚焦和提升行为。将“聚焦预防级别”设置为“高”或“非常高”,以防止在前台打开新窗口。
答案3
一种方法是在主菜单中右键单击窗口顶部栏,并将其设置为始终位于顶部。
答案4
嗨!试试这个:
#!/bin/bash
delay=0.5
while true; do
windowId=`xdotool getwindowfocus`
xdotool getwindowname $windowId
xdotool windowactivate $windowId;
sleep $delay;
done
此脚本取决于您是否将“焦点预防级别”设置得足够高,以便新打开的窗口不会获得焦点。它至少在 Ubuntu 10.04 和 12.04 上运行,但应该可以在任何地方运行……如果它对您不起作用,请说出来,我们可以一起思考!
这是一个无限循环(使用 ctrl+c 中断),它将“激活”具有焦点(键盘输入的焦点)的窗口。因此,它将使聚焦窗口每 0.5 秒“跳”到前台(您可以根据需要/喜好降低或增加延迟值)。
因此,所有新打开的应用程序和窗口仍将在前台打开,但会被具有焦点的窗口立即隐藏!
需要说明的是,它们不会在后台打开,但此脚本将提供几乎相同的效果。几乎是因为如果您运气不好,您仍然可以在焦点窗口被置于前台之前单击新打开的窗口,这将使新窗口成为焦点窗口...降低延迟将有助于防止这种情况发生,但会消耗更多 CPU,我认为小于 0.1 并不好,但您必须测试以查看哪种方法更适合您...
PS:你的xdotool版本必须支持这些命令:getwindowfocus、getwindowname、windowactivate