linux设置开机自动启动应用,可屏蔽桌面

您所在的位置:网站首页 linux怎么设置桌面 linux设置开机自动启动应用,可屏蔽桌面

linux设置开机自动启动应用,可屏蔽桌面

2024-07-01 08:44| 来源: 网络整理| 查看: 265

本篇适合有需求将某些应用或者服务甚至是QT应用设置成开机启动的玩家,提供三种添加开机自启方式,亲测有用!!!

一、往/etc/rc.local中添加执行脚本

第一种是最简单也是最基本的方式,将需要开机自启的UI或者应用添加写成脚本的形式,放置在固定的位置;然后将该脚本的绝对路径添加到/etc/rc.local中。 在这里插入图片描述 这种方式可能比较简易,但是存在一个弊端,如果你需要开机启动一个QT的界面应用的话,这种方式会在启动之后会先显示一下桌面,然后在进入UI界面 但是可以通过ctrl+alt+F7切换回桌面,满足任意时刻切换到桌面进行调试的要求;同时可以通过ctrl+alt+F1~6切换回ui界面,一般是F1即可

二、往systemd中添加开机自启服务

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。在老版本的Linux上移植使用init进程来启动服务,而init进行的启动方式是串行启动,只有前一个进程启动完成后才会进行下一个进程的启动,所以较systemd低,所以systemd诞生后就取代了init. 在这里插入图片描述 Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。 具体使用方式,可以看我的另一篇博文systemd服务分析

2.1 创建服务文件,编写systemd启动unit

每一个Unit都有一个配置文件,告诉Systemd怎么启动这个 Unit。Systemd默认从目录/etc/systemd/system/读取配置文件;

读懂配置文件

一个服务需要怎么启动,完全由它的配置文件决定的,systemd的服务文件后缀为.service,保存的文件路径在/etc/systemd/system下(一共有三个地方存放服务文件==具体使用方式,可以看我的另一篇博文systemd服务分析==); 在这里插入图片描述随便打开一个服务文件,比如sshd.service文件为例,其用于启动SSH服务,具体如下:

[Unit] Description=OpenBSD Secure Shell server After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/usr/sbin/sshd -t ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartPreventExitStatus=255 Type=notify [Install] WantedBy=multi-user.target Alias=sshd.service

不难看出上面代码块一共包含三个区块,每个驱动下都有不同的key-value;

2.1.1 [Unit]:启动顺序和依赖关系 Unit区块的Description字段给出当前服务的简单描述,Documentation字段给出文档位置;After字段:表示如果network.target或sshd-keygen.service需要启动,那么sshd.service应该在它们之后启动;Before字段,定义sshd.service应该在哪些服务之前启动;After和Before字段只涉及启动顺序,不涉及依赖关系;Wants字段:表示sshd.service与sshd-keygen.service之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.service继续执行;Requires字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service也必须退出;Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。 2.1.2 [Service]:启动行为,定义如何启动当前服务 EnvironmentFile字段:指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取;ExecStart字段:定义启动进程时执行的命;ExecReload字段:重启服务时执行的命令;ExecStop字段:停止服务时执行的命令;ExecStartPre字段:启动服务之前执行的命令;ExecStartPost字段:启动服务之后执行的命令;ExecStopPost字段:停止服务之后执行的命令;Type字段定义启动类型。它可以设置的值如下; simple(默认值):ExecStart字段启动的进程为主进程;forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程;oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务;dbus:类似于simple,但会等待 D-Bus 信号后启动;notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务;idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合; KillMode字段:定义Systemd如何停止sshd服务; control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;process:只杀主进程;mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号;none:没有进程会被杀掉,只是执行服务的stop命令; Restart字段:定义了sshd退出后,Systemd的重启方式; no(默认值):退出后不会重启;on-success:只有正常退出时(退出状态码为0),才会重启;on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;on-abnormal:只有被信号终止和超时,才会重启;on-abort:只有在收到没有捕捉到的信号终止时,才会重启;on-watchdog:超时退出,才会重启;always:不管是什么退出原因,总是重启; RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待42秒; 2.1.3 [Install]:定义如何安装这个配置文件,即怎样做到开机启动 WantedBy字段:表示该服务所在的 Target;Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是,sshd 所在的 Target 是multi-user.target;

这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

systemd的target

Systemd 目标注释runlevel0.target, poweroff.target中断系统(halt)runlevel1.target, rescue.target单用户模式runlevel2.target, runlevel4.target, multi-user.target用户自定义启动级别,通常识别为级别3。runlevel3.target, multi-user.target多用户,无图形界面。用户可以通过终端或网络登录。runlevel5.target, graphical.target多用户,图形界面。继承级别3的服务,并启动图形界面服务。runlevel6.target, reboot.target重启emergency.target急救模式(Emergency shell)

Systemd默认的启动Target为multi-user.target,我们也可以通过指令去查看当前启动的target

$systemctl get-default multi-user.target

结果表示当前的target下所有的服务都将在开机时启动;

一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。

2.2 创建服务文件

通过前面的分析,应该可以很清楚systemd启动服务的配置文件的编写规则,我们可以直接复制或者编写一套自己的服务文件; 比如说你新建一个服务文件名为:myui.service 编辑单元如下:

[Unit] Description=my ui service [Service] Type=simple ExecStart=你的应用或者脚本存放的路径,用于启动的 ExecReload=你的应用或者脚本存放的路径,用于重启的(非必要) ExecStop=你的应用或者脚本存放的路径,用于停止的(非必要) Restart=on-failure RestartSec=42s KillMode=process [Install] WantedBy=multi-user.target

以上的配置如果还是不太理解,具体使用方式,可以看我的另一篇博文systemd服务分析

2.3 添加到自启服务

完成前面的配置后,需要将该服务添加到自启服务中去,才可以实现开机自启。

sudo systemctl daemon-reload

设置开机自启

sudo systemctl enable gree

设置自启动,实质上就是在/etc/systemd/system/multi-user.target.wants/下添加服务文件的链接。

重启相关服务

sudo systemctl start gree.service

查看服务状态

sudo systemctl status gree.service 三、使用显示管理器启动

ubuntu使用的是显示管理器一般为:LightDM - 跨桌面显示管理器,可以使用任何工具包中编写的各种前端,当前开发机使用的Ubuntu16.04默认使用该管理器。

显示管理器也称登陆管理器,向用户显示登录屏幕,它们提供图形化登录并处理用户身份验证,当用户成功输入用户名和密码的有效组合时,会话开始。

大多数登录管理器会从/usr/share/xsessions/读取可用的.desktop文件,在安装各种窗口管理器时会在/usr/share/xsessions/下生成对应的desktop文件,比如ubuntu自带的ubuntu.desktop文件就在该文件下面,仿造它原来的启动文件配置自己的配置文件再进行启动更改即可;

3.1 .desktop配置

原ubuntu.desktop配置如下:

[Desktop Entry] Name=Ubuntu Comment=This session logs you into Ubuntu Exec=gnome-session --session=ubuntu TryExec=unity Icon= Type=Application DesktopNames=Unity X-Ubuntu-Gettext-Domain=gnome-session-3.0

.desktop涉及的语法规则如下:

Key描述Value 类型是否必须?TypeApplication (type1), Link (type2), Direcory (type3)stringYesVersion版本,例如1.1stringNoName应用程序的特定名称,例如“Mozilla”。localestringYesGenericName应用程序的通用名称,例如“Web浏览器”。localestringNoNoDisplay不在菜单中显示, 但可以与MIME类型相关联booleanNoComment应用描述ocalestringNoIcon要么绝对路径,要么符合图标主题规范localestringNoHidden是否隐藏,等同于不存在的文件booleanNoOnlyShowIn, NotShowIn一般不用此字段booleanNoDBusActivatableDBus激活,默认false。参阅D-Bus激活。应包含Exec行,实现兼容booleanNoTryExec如果文件不存在, 则忽略该文件,并不在菜单中出现stringNoExec执行路径 。参阅Exec KeystringNoPath当Type=Application时,程序运行的目录string No1Terminal程序是否在终端窗口中运行。booleanNoActions为其他组提供接口,比如Action=Gallery;,那么其他组就为[Desktop Action Gallery]string(s)NoMimeType此应用支持打开的类型,具体类型可以百度string(s)NoCategories参阅桌面菜单规范string(s)NoImplements默认情况下,桌面文件不实现任何接口。参阅接口string(s)NoKeywords用于搜索,不应该是Name或者为多余的值 GenericName。localestring(s)NoStartupNotify如果不存在,则合理的处理取决于实现(假设为false,使用StartupWMClass等)。参阅启动通知协议规范booleanNoStartupWMClass一般跟Name相同即可stringNoURL只适用于Type=LinkstringYes

直接复制原ubuntu的桌面启动文件,更名为你指定的文件

sudo cp /usr/share/xsessions/ubuntu.desktop yourfile.desktop

删除不必要的key避免造成不必要的麻烦,如下:

[Desktop Entry] Name=yourapp Comment=This session xxxxxxx Exec=/你的待执行的应用路径 Icon= Type=Application 第4行,可执行文件的绝对路径,该KEY是必选的; 3.2 添加到启动项

完成到3.1 .desktop配置已经可以满足手动去启动程序了,就类似一个图标,接下来需要设置为登陆管理器自动启动;

3、使用显示管理器启动提到ubuntu使用的是lightdm作为登陆管理器,所以我们需要设置该管理器进行自动启动,编辑lightdm的配置文件/etc/lightdm/lightdm.conf,如下:

[Seat:*] autologin-guest=false autologin-user=gree autologin-user-timeout=0 #autologin-session=app #autologin-session=xterm #autologin-session=openbox #autologin-session=ubuntu autologin-session=yourfile // 这里的yourfile和yourfile.desktop相关

和shell脚本一样,使用#号进行注释,注释第8行,添加第9行;需要注意的有如下几点:

autologin-user字段必须是该autologin 群组的一员才能在不输入密码的情况下自动登录;本文的gree属于autologin 群组;autologin-session字段更改为3.1 .desktop配置中的yourfile.desktop,保留yourfile填入即可;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3