当窗口最大化时,有没有办法阻止窗口的标题栏与面板合并?

我正在使用一台桌面机,屏幕空间很大,所以当窗口最大化时,我不需要窗口的标题栏与全局菜单栏合并。此外,我还在使用双屏设置,所以窗口最大化并不意味着它是唯一可见的窗口。
在Unity之前,我可以通过点击窗口的标题栏切换到最大化的窗口,或者通过点击关闭按钮关闭窗口,即使它没有焦点;但现在我无法这样做,因为标题栏消失了,而全局菜单栏在那个屏幕上是空的。这并不是一个很大的问题 - 我可以点击窗口的某些部分来使其获得焦点 - 但这并不直观,它迫使我重新学习我的鼠标行为。
我想要关闭标题栏和全局菜单栏的合并,但如何操作呢?
编辑:
我只是希望窗口的标题栏在最大化时不要与顶部面板合并。就我个人而言,全局菜单应该保留在顶部面板中。当前的最大化效果是这样的。

enter image description here

我希望它能像这样最大化(在那个截图中,未最大化的窗口已被调整大小以占据剩余空间)

enter image description here


使用经典的Gnome 2桌面难道不是更好的选择吗? - neydroydrec
6不,经典的GNOME 2并不是一个更好的选择。Unity中有很多东西并不差,但在多显示器设置下,能够点击窗口的标题栏来聚焦它是非常有用的,即使该窗口是最大化的。Unity将标题栏与面板合并的行为阻止了这样做。然而,这并不是抛弃一切的理由。 - Richard Turner
可以使用自定义会话来完成,但是它不会按照你的期望工作,因为全局菜单只在鼠标悬停时可见,就像你的第二个截图所显示的那样。最终你只会得到两个标题栏的副本。 - Veazer
@Veazer 嗯,这是一个开始;至少剩下的问题只是如何修补全局菜单,使其始终显示而不仅在鼠标悬停时显示。愿意提交一个回答来解释如何使用自定义会话来实现这一点吗? - Richard Turner
你是在使用Unity 3D还是2D?如果是2D的话,你想要使用metacity还是compiz作为窗口管理器? - Veazer
@Veazer 嗯,事实上我现在并没有使用Unity,但这是另一个故事。当我发布问题时,我正在使用Unity 3D。我理解2D很可能很快就会消失,因为3D现在(或很快)可以在没有硬件加速的情况下运行,所以对于后人来说,在这里给出一个与3D相关的答案是好的。 - Richard Turner
啊,那就有问题了。我还没有找到任何使用Unity 3D实现你想要的方法。我正在使用Unity 2D + Compiz,因为性能更好,但不幸的是如你所说Unity 2D即将被淘汰。如果你希望使用脚本创建一个Unity 2D + Compiz会话来实现你想要的,请告诉我,我会发布它。 - Veazer
现在,我遇到了相反的问题,窗口的标题栏和Unity任务栏都占据了屏幕空间。 - AJMansfield
6个回答

当标题栏被拖动到Unity顶部/上方栏附近时,您可以禁用窗口最大化到标题栏。

访问:http://ubuntuforums.org/showthread.php?t=1743309 (请注意stevecomrie在帖子#6中的回复)

  • 打开CompizConfig设置管理器
  • 点击“窗口管理”类别中的“网格”
  • 点击“边缘”选项卡
  • 展开“调整大小操作”下拉菜单
  • 将“顶部边缘”下拉菜单更改为“无”
  • 关闭CompizConfig,完成设置。

这只是一个部分解决方案。某些应用程序仍然会在运行时自动合并状态。而且,您仍然可能通过双击未合并应用程序的标题栏而意外触发合并。如果有人知道如何完全禁用任何形式的Unity面板与应用程序标题栏合并,我们将不胜感激!


这个解决方案也可以用来禁用左/右边缘的行为。 - ImaginaryRobots

对于Unity 3D,你可以尝试这个脚本。
基本上它会检查最大化的窗口,并将其还原并调整大小为最大宽度和高度(在你的机器上经过测试后发现效果良好);如果你感觉有什么问题,也可以调整nXpos和nYpos。
demaximize.sh 1005 710 #适用于1024x768,在这里至少有效...
#!/bin/bash

# make tests to your system, this works 'here' at 1024x768
nWidth=$1 #1005
nHeight=$2 #710
nXpos=1
nYpos=22

while true; do 
    windowId=`xdotool getactivewindow`;
    if xwininfo -wm -id $windowId |tr -d '\n' |grep -q "Maximized Vert.*Horz";then
        wmctrl -i -r $windowId -b toggle,maximized_vert,maximized_horz;
        xdotool windowsize $windowId $nWidth $nHeight;
        xdotool windowmove $windowId $nXpos $nYpos;
        xdotool getwindowname $windowId
    fi; 
    sleep 0.5;
done

PS:对于Chrome/Chromium来说,启用“使用系统标题和边框”选项效果更好。

这是一个新颖的方法,但实际上这只是一个糟糕的折中方案,不是吗? :) - Richard Turner
...那个可以运行并且可以改进得更好的程序:),我的当前实现有220行代码:D,但它确实是一个非常糟糕的hack......我被迫修复窗口管理器的窗口定位“错误?”和许多其他奇怪的事情,如果有一个窗口管理器选项可以不最大化,只是使窗口具有最大可能的大小,那将不需要这些。这样它就只会伪最大化...... - Aquarius Power

来源:http://ubuntuguide.net/unity-2d-how-to-removeenable-maximized-window-titlebar

这可以通过gconftool来处理。如果你已经安装了GUI前端“gconf-edtor”,只需启动它并导航到/apps/metacity/general,然后取消选中“show_maximized_titlebars”以移除最大化窗口的标题栏。


或者,您可以在终端中执行此命令以删除它:
gconftool --type bool --set /apps/metacity/general/show_maximized_titlebars false

运行以下命令以重新启用它:
gconftool --type bool --set /apps/metacity/general/show_maximized_titlebars true

1我很久没有使用Unity了,自从我发布这个问题以来,所以我一直无法测试人们的回应。我对你的答案抱有很高的期望,但在完整的Unity上,它在Ubuntu 12.10上不起作用。也许它只适用于Unity 2D... - Richard Turner
是的,这只适用于Unity 2D。请注意apps/metacity。Unity 3D使用Compiz,而Unity 2D使用Metacity。 - Seth

目前来看,ctrl + alt 5 似乎是你最好的选择。抱歉。也许为了消除诱惑,你可以在 Ubuntu-Tweak 中移除最大化按钮,但目前如果你最大化窗口,它将会将标题栏与菜单栏合并。


1有关于这个的任何更新吗? - AlexP
1在这里,按下ctrl+alt+5没有任何作用,但是按下ctrl+alt+numpad5只会最大化窗口,标题栏仍然合并。 - Aquarius Power
@AlexP 我在下面写了一个脚本,也许对你有帮助 :) - Aquarius Power

我差点哭了,试图在Ubuntu 13.10上去掉全局菜单。你知道吗,我的主要应用程序,比如Eclipse和Android Studio,在合并时有时会“失败”。结果就是你得到一个只部分展开的合并菜单,意味着你无法再使用该程序。所以我找到了这个参考链接: 如何在Ubuntu 13.10上移除全局菜单栏 $ sudo apt-get remove indicator-appmenu 我还不得不重新启动一下,现在生活好多了。

我很高兴听到你找到了解决问题的方法,这使你的生活变得更好了。但是这与所问的问题没有关系,问题是关于窗口标题栏,而不是关于全局菜单的。 - Richard Turner

据我所知,目前还不可能实现(有一些关于将其引入Ubuntu 12.04或12.10的讨论,但我们还需要等待并观察)。眼下一个可能的解决方案是使用Emerald作为窗口装饰器,但我不确定它是否能百分之百地工作。