我怎样才能阻止正在执行的操作时弹出新窗口?

我怎样才能阻止正在执行的操作时弹出新窗口?

通常,在 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

相关内容