怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

各种窗口管理器和美化相关
回复
express_w
帖子: 7
注册时间: 2017-03-06 11:16
系统: windows

怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#1

帖子 express_w » 2017-03-06 11:24

我用的是Ubuntu 16.04, Intel赛扬CPU。
Linux kevin-minipc 4.8.0-39-generic #42~16.04.1-Ubuntu SMP Mon Feb 20 15:06:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux。

我写了一个Qt程序,我在桌面环境下运行时全屏的。
现在我想在系统启动的时候自动登录,不加载桌面环境,并且运行我的这个程序。

我现在找到的方法是:
在/etc/lightdm下增加lightdm.conf:
[Seat:*]
user-session=myxclient
autologin-user=kevin
autologin-user-timeout=delay

其中kevin是我的系统账号。

在/usr/share/xsessions下增加myxclient.desktop:
[Desktop Entry]
Name=myapp
Comment=myapp
Exec=/home/kevin/myapp
Icon=
Type=Application

其中/home/kevin/myapp是我的程序所在路径。

这样配置后,系统启动就不会启动桌面,同时会自动登录并运行我的程序,但是这个程序不是全屏的。
怎样才能使之全屏运行呢?通过其他方式能达到目的也行。

另外,如果没有桌面环境,还能使用系统的中文输入法吗?
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#2

帖子 vickycq » 2017-03-06 16:34

express_w 写了:这样配置后,系统启动就不会启动桌面,同时会自动登录并运行我的程序,但是这个程序不是全屏
可能原因:没有窗口管理器。在没有窗口管理器的状态下,不方便实现窗口的移动、最大化、全屏等。
express_w 写了:怎样才能使之全屏运行呢?通过其他方式能达到目的也行。
如果您的应用程序支持 -geometry 字符串,可以在 myxclient.desktop 中 Exec= 中后追加参数指定尺寸等于显示器分辨率。
或搜索其它 kiosk mode 解决方案。
也可自动登录进入一简易窗口管理器的 session,并在此简易窗口管理器的自启管理中配置以全屏模式启动应用此程序。
例:使用 openbox
1. 安装 openbox
2. 用主楼中方法配置 openbox 自动登录;
3. 在 openbox 自启管理配置文件(~/.config/openbox/autostart)中配置启动应用此程序;
4. 在 openbox 配置文件 ~/.config/openbox/rc.xml 中配置此程序启动时自动切换到全屏模式。参考 http://unix.stackexchange.com/a/217603
5. 在 openbox 配置文件 ~/.config/openbox/rc.xml 中视情取消 openbox 的默认窗口管理快捷键,防止用户改变窗口状态。

express_w 写了:另外,如果没有桌面环境,还能使用系统的中文输入法吗?
确保相应的环境变量正确即可。先测试能否使用,不能使用再说明。
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
express_w
帖子: 7
注册时间: 2017-03-06 11:16
系统: windows

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#3

帖子 express_w » 2017-03-07 15:12

谢谢你这认真的回复。

1. 的确是window manager的问题。
昨天在stackoverflow上也有人提示要确保wm启动。
我查了一下,ubuntu正常启动是有compiz的,而我修改之后,compiz没有起来。
然后我把myxclient.desktop里面执行的命令换成一个脚本,脚本里面就是启动compiz和我的程序:
compiz&
/home/kevin/myapp
然后就可以了。


2. 简单搜了一下kiosk mode,这个应该就是定制linux系统用于专门的应用吧,感觉这个才是正道,但是这好像改很多东西,要求对系统比较熟悉,
打算后面再研究一下。
-geometry 字符串这个没有支持,而且现在还不知道怎么支持。

3. openbox这个方案试了一下,也是可以的。
而且没有在在openbox的配置文件里面配置全屏,也是可以全屏的,大概是跟我是在Qt程序里面设置了全屏有关系。

4. 我现在无法在我的程序里面切换到中文输入法,这个要怎么改呢?
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#4

帖子 vickycq » 2017-03-07 23:15

express_w 写了:然后我把myxclient.desktop里面执行的命令换成一个脚本.... 无法在我的程序里面切换到中文输入法,这个要怎么改呢?
试试在这个脚本里添加设置环境变量的命令。假设输入法是 fcitx
确保已经安装了 fcitx-frontend-qt4 fcitx-frontend-qt5

代码: 全选

export CLUTTER_IM_MODULE=fcitx
export QT4_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx

compiz&
/home/kevin/myapp
如果 Qt 程序使用了 Qt5,可能需要其它设置

假设输入法是 ibus
确保已经安装了 ibus-qt4

代码: 全选

export CLUTTER_IM_MODULE=ibus
export QT4_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export GTK_IM_MODULE=ibus

compiz&
/home/kevin/myapp
如果 Qt 程序使用了 Qt5,可能需要其它设置
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
express_w
帖子: 7
注册时间: 2017-03-06 11:16
系统: windows

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#5

帖子 express_w » 2017-03-08 14:09

我试了一下,不能切换到中文输入法,

然后我又换到桌面环境下运行我的程序,也不能切换输入法,

我用的是qt5写的程序。
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#6

帖子 vickycq » 2017-03-08 15:39

express_w 写了:我用的是qt5写的程序。换到桌面环境下运行我的程序,也不能切换输入法
执行以下指令将结果全部复制贴上来

代码: 全选

dpkg -l | grep 'ii  ibus \|ii  fcitx \|ibus-qt\|fcitx-frontend-qt'
find /usr/lib | grep libibusplatforminputcontextplugin.so
printenv | grep 'IM_\|XMOD'
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
express_w
帖子: 7
注册时间: 2017-03-06 11:16
系统: windows

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#7

帖子 express_w » 2017-03-09 9:29

dpkg -l | grep 'ii ibus \|ii fcitx \|ibus-qt\|fcitx-frontend-qt'
ii fcitx 1:4.2.9.1-1ubuntu1.16.04.2 all Flexible Input Method Framework
ii fcitx-frontend-qt4 1:4.2.9.1-1ubuntu1.16.04.2 amd64 Flexible Input Method Framework - Qt4 IM Module frontend
ii fcitx-frontend-qt5:amd64 1.0.5-1 amd64 Free Chinese Input Toy of X - Qt5 IM Module frontend
ii ibus 1.5.11-1ubuntu2 amd64 Intelligent Input Bus - core
ii ibus-qt4 1.3.2-2build1 amd64 qt-immodule for ibus (QT4) (plugin)
ii libibus-qt1 1.3.2-2build1 amd64 qt-immodule for ibus (QT4) (library)



find /usr/lib | grep libibusplatforminputcontextplugin.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so

printenv | grep 'IM_\|XMOD'
这条命令没有输出信息。
设置环境变量是加在脚本里面的,自动登录之后没有桌面,就不能在里面运行shell了,所以我是ssh登录上去看的。
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#8

帖子 vickycq » 2017-03-09 13:46

express_w 写了:printenv | grep 'IM_\|XMOD'这条命令没有输出信息。我是ssh登录上去看的。
ssh登录上去,环境比较精简,没有输出是正常的。
之前好像忘了检查对应的输入法守护程序是否启动。这样,以 fcitx 为例,将启动脚本改成

代码: 全选

export CLUTTER_IM_MODULE=fcitx
export QT4_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx

fcitx&

compiz&
/home/kevin/myapp
看看行不行。当然要先确保 fcitx 中已安装并添加了输入法
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
express_w
帖子: 7
注册时间: 2017-03-06 11:16
系统: windows

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#9

帖子 express_w » 2017-03-10 10:55

好像还是不行,我的是ibus,所以我加的是

代码: 全选

ibus&
这种情况下,用什么键切换输入法呢?还是起来就用中文输入法?
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#10

帖子 vickycq » 2017-03-10 15:15

express_w 写了:好像还是不行,我的是ibus,所以我加的是ibus&
ibus 需要启动 ibus-daemon。之前一时忘记了你曾经说过“然后我又换到桌面环境下运行我的程序,也不能切换输入法,”这样的话,估计即使启动了 ibus-daemon 也不行的。
express_w 写了:这种情况下,用什么键切换输入法呢?还是起来就用中文输入法?
如果能工作的话,跟在桌面环境中一样。
可能 ibus 的 Qt5 支持有问题。建议在主楼所述场景中改用 fcitx。在桌面环境中可以继续用 ibus。
注意先安装一种 fcitx 输入法,如 fcitx-pinyin
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
express_w
帖子: 7
注册时间: 2017-03-06 11:16
系统: windows

Re: 怎样不启动桌面环境运行自己的GUI程序并让它全屏显示?

#11

帖子 express_w » 2017-06-13 15:28

我又回来了,前一阵忙别的了。

我尝试了一下,即使在桌面环境里面,运行我的qt程序,fcitx输入法也用不了。



另外,有遇到了一个新问题:
系统启动的时候,会直接进入我的qt程序。
如果我用Alt+F4关闭了我的qt程序,系统会弹出一个对话框,让我输入用户名密码之后,才会重新启动qt程序。

有没有办法让系统不弹出对话框,直接启动qt程序呢(和系统启动时一样)?
回复