【原创】ubuntu下图形程序自启动的几种方法

【原创】ubuntu下图形程序自启动的几种方法,第1张

概述版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/ @ 0.前言 在嵌入式的场合通常会让Linux只执行

版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
@

目录0.前言1.带桌面环境的自动启动1.1Ubuntu1.2 openbox2.使用登录管理器启动应用2.1 窗口管理器2.2 登录管理器2.2.1 没有窗口管理启动应用程序2.2.2 登录管理器自动登录配置2.3 xorg2.3.1 xinit(startx)2.3.2 xserverrc2.3.3没有窗口管理器启动应用程序

0.前言

在嵌入式的场合通常会让linux只执行某一个特定的人机交互应用程序,比如一个QT应用,本文讲述了在Ubuntu环境下如何配置应用自启动,希望对你有所帮助。

1.带桌面环境的自动启动

该方法由桌面去启动qt程序,这里说的桌面指窗口管理器如xface、gnome、kde等。

1.1Ubuntu

以Ubuntu 图形界面作为例子(这里使用Ubuntu16.04,基于gnome开发)如下:

在当前用户home下创建autostart目录:

mkdir -p ~/.config/autostart

创建一个**.desktop的文件如下:

cat > ~/.config/autostart/Qt_test.desktop << EOF[Desktop Entry] Type=ApplicationExec=/home/Qt_testEOF

有关desktop的条目含义可以参看https://specifications.freedesktop.org/desktop-entry-spec/latest/;

该方法可以达到自动启动应用程序的效果,但在一些比如嵌入式应用环境,Ubuntu桌面环境也不需要的时候该方法就不适合,原因在于Ubuntu桌面环境太庞大,占用资源过多。

1.2 openBox

OpenBox 是一个轻量级、可高度定制以及支持大量标准的窗口管理器,几乎无冗余软件,仅是一个窗口管理器,比较适合嵌入式应用环境。让登录管理器来启动openBox、QT应用程序,或者OpenBox启动QT应用程序。

安装openBox:
sudo apt-get install openBox

配置登录管理器lightdm自动登录

/etc/lightdm/lightdm.conf中指定autologin-session使用openBox窗口管理器:

[Seat:*]autologin-user=workautologin-session=openBox

/usr/share/xsessions/下创建Qt程序app.desktop文件(也可由openBox去启动):

[Desktop Entry]name=qt appComment=This session exec qt app Exec=app-path/app [arg]TryExec=app-path/app [arg]Icon=Type=Application

保存后重启。

附:openBox一些界面配置

安装完成后,你应该把默认的配置文件 rc.xml,menu.xml,和 autostart 和environment 复制~/.config/openBox:

$ mkdir -p ~/.config/openBox$ cp /etc/xdg/openBox/{rc.xml,autostart,environment} ~/.config/openBox

注意: 不要用 root 进行以上 *** 作,应使用普通用户。

这四个文件组成了 OpenBox 配置的基础。每一个文件是配置的独立的部分,它们的功能是:

rc.xml
本文件是配置文件.用于定义键盘快捷键,主题,虚拟桌面等。

menu.xml
本文件定义了在桌面用鼠标击键时显示的菜单。它定义了程序启动器和快捷方式。

autostart
本文件在 OpenBox 启动时读取。包含了一些需要启动的程序,通常用来定义许多环境变量、
启动面板/dock、设置壁纸或者执行其他启动脚本等等。细节看 Openbox Wiki.

menu.xml
openBox-session 启动时调用。它包含了在 OpenBox 上下文中定义的变量。任何你想对 OpenBox 本身可见以及从菜单启动的程序需要的变量都放在这里。

让OpenBox作为一个单独的窗口管理器运行,把以下内容加入~/.xinitrc:

exec openBox-session

如果想在命令行下启动 OpenBox,用 xinit :

$ xinit /usr/bin/openBox-session
2.使用登录管理器启动应用

登录管理器又称显示管理器,可直接由显示管理器启动我们的应用程序。

简要说明一下与桌面环境相关的几个东西:

2.1 窗口管理器

我们熟悉的GNOME、KDE、Xface...;使用这些桌面环境应该尽量使用对应的登录管理器来启动。

2.2 登录管理器

窗口管理和X11 需要登录管理器来启动:

​ GDM-GNOME登录管理器;

​ SDDM - 基于QML的显示管理器和KDM的后继者; 推荐用于 plasma和 LXQt;

​ XDM - X显示管理器,支持XDMCP;

​ lightDM - 跨桌面显示管理器,可以使用任何工具包中编写的各种前端,Ubuntu16.04默认使用该管理器。
这些桌面管理器均可安装,安装后只需用systemd 启动该服即可,例如在Ubuntu16.04上安装sddm,并启用相应的systemd服务:

sudo apt-get install sddm

然后设置开机启动,当然需要先关闭自带的lightDM服务:

sudo systemctl disable lightdm.servicesudo systemctl enable sddm.service

启用sddm后/etc/systemd/system/display-manager.service应该链接到/usr/lib/systemd/system/sddm.service

2.2.1 没有窗口管理启动应用程序

登录管理器如何启动窗口管理的?

大多数登录管理器会从/usr/share/xsessions/读取可用的.desktop文件,在安装各种窗口管理器时会在/usr/share/xsessions/下生成对应的desktop文件,比如ubuntu自带的ubuntu.desktop文件,它的配置如下:

[Desktop Entry]name=UbuntuComment=This session logs you into UbuntuExec=gnome-session --session=ubuntuTryExec=untiyIcon=Type=ApplicationDesktopnames=UnityX-Ubuntu-Gettext-Domain=gnome-session-3.0

可以在没有任何桌面或窗口管理的情况下启动应用程序,例如要启动Google-Chrome只需在/usr/share/xsessions/下创建web-browser.desktop文件如下:

[Desktop Entry]name=Web browserComment=Use a web browser as your sessionExec=/usr/bin/Google-Chrome --auto-launch-at-startupTryExec=/usr/bin/Google-Chrome --auto-launch-at-startupIcon=Google-ChromeType=Application

**这能满足自动启动Qt应用需求,systemd启动登录管理器,登录管理器登录后去启动QT应用程序。这里还需要设置登录管理器自动登录配置,达到自动启动目的。
**

登录管理器与用户会话相关的配置文件/var/lib/AccountsService/user/$USER,使用窗口管理器登录对应的用户后会使用该配置文件中的设置,比如桌面背景图等,ubuntu的背景图配置就是配置这个文件,下面是一个本机上的示例(加了一些注释):

[com.canonical.indicator.sound.AccountsService]Playername=''Timestamp=0Title=''Artist=''Album=''ArtUrl=''PlayerIcon=<('themed',<['application-default-icon','application-default','application']>)>[inputSource0]xkb=us					#键盘类型[User]XSession=ubuntu			#会话名称Language=en_GB.UTF-8	#语言Background=/home/work/Pictures/backgroundDefault.jpg #桌面背景SystemAccount=false
2.2.2 登录管理器自动登录配置

这里使用Ubuntu 16.04自带的lightdm说明,其他登录管理器自行查询相关文档:

启用lightdm使用systemctl,以便启动时启动:

sudo systemctl enable lightdm.servicesudo systemctl start lightdm.service

lightDM可以通过修改其配置文件/etc/lightdm/lightdm.conf来配置,编辑该文件,配置这些行:

[Seat:*]autologin-user = username

username必须是该autologin 群组的一员才能在不输入密码的情况下自动登录:

#groupadd -r autologin#gpasswd -a username autologin

lightDM使用~/.dmrc用户指定的会话登录为自动登录。要覆盖此文件需要在/etc/lightdm/lightdm.conf中指定autologin-session

[Seat:*]autologin-user = usernameautologin-session = session

有效session名称列表可以通过列出X 的会话/usr/share/xsessions/*.desktop 和Wayland的列表/usr/share/wayland-sessions/*.desktop 来找到。

查看当前系统启动了哪些会话窗口:

loginctl
2.3 xorg

X.Org 项目提供了 X 窗口系统的开源实现。开发工作是在freedesktop.org 社区的通力合作下完成。X.Org 组织是非盈利教育机构。Xorg 在 linux 中非常流行,已经成为linux图形用户程序的必备条件,所以大部分发行版都提供了它.

用户通常需要选择安装某个 窗口管理器 或 桌面环境以配合使用 X。

2.3.1 xinit(startx)

如果不用登陆管理器启动 X显示服务,可以使用xinit手动启动Xorg显示服务。

执行xinitstartx时,它们将寻找~/.xinitrc作为shell脚本运行以启动客户端程序。

如果~/.xinitrc不存在,startx将运行默认值/etc/X11/xinit/xinitrc(默认的xinitrc启动一个Twm,xorg-xclock和Xterm环境),ubuntu安装后的/etc/X11/xinit/xinitrc文件如下:

#!/bin/bash. /etc/X11/Xsession
2.3.2 xserverrc

xserverrc 文件是负责启动X服务器的shell脚本,运行startxxinit执行~/.xserverrc,如果~/.xserverrc不存在startx会用/etc/X11/xinit/xserverrc,内容如下:

#!/bin/shexec /usr/bin/X -noListen tcp "$@"

启动X11, -noListen tcp 禁用X11的抽象套接字。
要运行Xorg,直接执行:

$startx

如果配置了xserverrrc:

$xinit -- :1

注意:当另一个X服务器已经启动时,xinit不处理多个显示。对于必须通过附加指定显示,这里是以上。-- :display_number display_number 1

要退出X,直接运行窗口管理器的退出功能,如果没有窗口管理器,执行:

$ pkill -15 Xorg

pkill将终止所有正在运行的X实例,要专门终止当前虚拟终端上的窗口管理器:

$ pkill -15 -t tty“$ XDG_VTNR”Xorg
@H_512_403@2.3.3没有窗口管理器启动应用程序

可以在没有窗口管理器的情况下仅启动特定应用程序,尽管这很可能仅适用于以全屏模式显示的单个应用程序。例如~/.xinitrc:

...exec Qt_tese

缺点:非自动启动,而是手动输入startx命令启动.

总结

以上是内存溢出为你收集整理的【原创】ubuntu下图形程序自启动的几种方法全部内容,希望文章能够帮你解决【原创】ubuntu下图形程序自启动的几种方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1015907.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存