在Ubuntu中启动没有桌面环境的程序时,窗口周围没有阴影

时间:2017-11-13 11:51:37

标签: linux qt

操作系统:Ubuntu 16.04

我写了一个Qt程序并在没有桌面环境的情况下运行它。

这是关于如何在没有桌面环境的情况下运行它的问题。

How can I run my GUI application without desktop enviroment and make it fullscreen?

很快,我通过两个步骤完成此操作:

  1. 在/ etc / lightdm中添加一个lightdm.conf来启动我的xsession;
  2. 在/ usr / share / xsession中添加一个.desktop文件来启动我的程序:

    2.1启动compiz作为窗口管理器;

    2.2启动我的程序。

  3. 脚本中的最后两行是:

    compiz&
    /home/kevin/myapp
    

    现在我有另一个问题

    当我的程序中弹出一个窗口时,窗口没有阴影,就像桌面环境中的程序一样。

    因此,弹出窗口与其父窗口之间没有明确的边界。

    但是,当我在桌面环境中运行它时,弹出窗口周围会出现阴影。

    如何在弹出的窗口周围出现阴影?

1 个答案:

答案 0 :(得分:0)

将您的问题归结为其基本要素,您所问的是为什么,当您在没有窗口管理器的情况下运行X11程序时,您无法获得Window管理器的装饰。答案当然是“因为没有窗口管理器”。

https://en.wikipedia.org/wiki/X_window_manager

简而言之,X11窗口只是矩形(通常),允许应用程序在专用区域绘制,而不会干扰其他应用程序。它像您习惯的那样管理输入,但在视觉上,它只是矩形。

X11允许运行特殊程序,称为窗口管理器。无论何时你想要显示一个窗口,该程序都会知道,并且可以在该窗口中执行操作。特别是,标准的做法是将窗口包装在窗口管理器的窗口中,并为窗口显示一组控件。这些包括最大化,最小化,关闭,移动窗口,调整大小等的简单方法。

您可以使用名为xwininfo的程序查看此额外窗口。你会看到,当你在没有经理的情况下运行你的程序时,它只是你的窗口。当您使用经理运行它时,您的窗口是一个或多个(取决于WM)其他窗口的子项。

你谈到的阴影也是你的窗口管理员所做的事情。如果你在没有它的情况下跑步,你将无法得到它。

至于解决方案,我可以想到两个:

  1. 编写自己的迷你窗口管理器。这可以是一个官方的窗口管理器,或者只是用一个更大的窗口包装你自己的应用程序窗口,增加一个黑色边框像素。
    1. 使用窗口管理器,并要求它不要将其控件添加到窗口中。窗口管理器之间的精确细节略有不同,但DOCK窗口类型可能会执行您想要的操作。