Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Manjaro开机自启动脚本实现 #2

Open
MregXN opened this issue Feb 4, 2019 · 3 comments
Open

Manjaro开机自启动脚本实现 #2

MregXN opened this issue Feb 4, 2019 · 3 comments

Comments

@MregXN
Copy link
Owner

MregXN commented Feb 4, 2019

Manjaro开机自启动脚本实现

前言

是的没错,在试遍了网上所有我能查到的脚本自启动的方法都失败了以后,我才气得整理了上一篇issue,并不是真的对开机过程感兴趣 - -

不过恶补完这里的知识盲区之后.我也逐渐明白了失败的原因:

网络上的方法大部分是在启动初始化程序时做做手脚(上一篇issue(Linux开机流程整理)中有整),而我所使用的manjaro发行版早已经弃用了这种模式,转而采用了systemd,以下是用ArchWiki查找init时的原话:

Warning: Arch Linux only has official support for systemd. When using a different init system, please mention so in support requests.

所以在我的/etc目录下并没有init文件夹和init.d文件夹,更别说在其中配置所谓的自启动脚本了

至于用systermd完全替代init系统到底孰优孰劣,后头若有空可以再开一篇issue整整,今天这篇主要是记录如何利用systemd实现archlinux的个性化开机

笔记

systemd

systemd的文件主要存放在/usr/lib/systemd 目录中,有系统(system)和用户(user)之分

/usr/lib/systemd/system/ #开机不登陆就能运行
/usr/lib/systemd/user/ #登陆后运行

每一个服务以.service结尾,文件内一般会分为3部分:[Unit]、[Service]、[Install]

[Unit] 主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别

[Service] 是服务的关键,是服务的一些具体运行参数的设置,

Type=forking是后台运行的形式,

PIDFile为存放PID的文件路径,

ExecStart为服务的具体运行命令,

ExecReload为重启命令,

ExecStop为停止命令,

PrivateTmp=True表示给服务分配独立的临时空间

注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!

[Install] 是服务安装的相关设置,可设置为多用户的

步骤

以我为例,我需要在每次开机时配置自己的扩展显示器 (因为默认只能到 1240*768???所以重启都需要手动添加新的模式???暂时还没找到什么更好的方法 )

setmonitor.sh

#!/bin/bash 
sudo xrandr --newmode "1680x1050"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
sudo xrandr --addmode DP1 1680x1050
echo "successfully run the code!!!!!!!!!!!!!!!!!!!!" 

保存在autostart文件夹(当然任意都行),并给脚本赋予执行权限

sudo chmod 0755 /home/mregxn/autostart/setmonitor.sh

setmonitor.service

[Unit]
Description=run shell script

[Service]
ExecStart= /home/mregxn/autostart/setmonitor.sh
Type = simple

[Install]
WantedBy=multi-user.target

文件保存到/usr/lib/systemd/system/路径下,利用systemctl指令配置开机启动

systemctl enable setmonitor.service

重启后利用systemctl status查看setmoniter.service的运行状态,可以发现虽然配置的时候出了问题(...暂时还找不着办法解决) ,但这一波操作确实成功实现了利用systemd开机自动运行用户自定的脚本

Feb 09 21:36:49 mregxn-pc systemd[1]: Started run shell script.
Feb 09 21:36:49 mregxn-pc sudo[521]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr./bin/xrandr --newmode 1680x1050 146.25 168
Feb 09 21:36:49 mregxn-pc sudo[521]: pam_unix(sudo:session): session opened for user root by (uid=0)
Feb 09 21:36:49 mregxn-pc setmonitor.sh[517]: Can't open display
Feb 09 21:36:49 mregxn-pc sudo[521]: pam_unix(sudo:session): session closed for user root
Feb 09 21:36:49 mregxn-pc sudo[552]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/xrandr --addmode DP1 1680x1050
Feb 09 21:36:49 mregxn-pc sudo[552]: pam_unix(sudo:session): session opened for user root by (uid=0)
Feb 09 21:36:49 mregxn-pc setmonitor.sh[517]: Can't open display
Feb 09 21:36:49 mregxn-pc sudo[552]: pam_unix(sudo:session): session closed for user root
Feb 09 21:36:49 mregxn-pc setmonitor.sh[517]: successfully run the code!!!!!!!!!!!!!!!!!!!!
@Luochenglong
Copy link

thanks

1 similar comment
@zaunist
Copy link

zaunist commented Jul 23, 2020

thanks

@jacklanda
Copy link

jacklanda commented Oct 28, 2020

如果不通过systemd,其实也可以直接用Arch系自带的启动器来启动的。不过写法还是跟.service文件相似。
图片
图片

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants