Ubuntu 开机启动图形界面应用程序

概述

目标:开机全屏运行浏览器,自动打开指定网址;

环境:Ubuntu 18.04

分析

整理一下大致思路,比较简单:

1. 取消桌面启动,减少资源浪费;
2. 用户自动登陆;
3. 自动打开图形界面应用程序;

准备

更换apt-get源

系统启动后,第一件事就是把apt-get的源修改为国内镜像,本文用的是阿里源,配置过程如下:

cd /etc/apt/
# 习惯性操作
$ sudo cp sources.list sources.list-bak
# 将下面一段代码替换掉sources.list原来内容
$ sudo vi sources.list
# ------------------start---------------------
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
# ------------------end---------------------

# 更新源地址
$ sudo apt-get update

软件包安装

chromium-browser是必须的,其他软件包根据自己的需求。

$ sudo apt-get install vim
$ sudo apt-get install nginx
$ sudo apt-get install chromium-browser

开始

设置系统运行级别

系统启动默认进入字符界面的配置有2种方式:

1. 修改grubquiet splash改为text

2. 使用systemd来设置runlevels
本文主要是第二种方式,Ubuntu使用systemd而不是init,因此runlevels的概念被术语target所取代。因此init-based runlevelssystemd-based targets之间确实存在关系,映射如下:
┌─────────┬───────────────────┐
│Runlevel │ Target │
├─────────┼───────────────────┤
│0 │ poweroff.target │
├─────────┼───────────────────┤
│1 │ rescue.target │
├─────────┼───────────────────┤
│2, 3, 4 │ multi-user.target │
├─────────┼───────────────────┤
│5 │ graphical.target │
├─────────┼───────────────────┤
│6 │ reboot.target │
└─────────┴───────────────────┘
如果只是修改当前runlevels,执行 sudo systemctl isolate multi-user.target即可
咱们要修改默认runlevels,执行以下命令:

$ sudo systemctl enable multi-user.target
$ sudo systemctl set-default multi-user.target
# 设置后查看runlevels,结果为:N 3
$ runlevels

重启后系统自动进入字符界面,如果想启动桌面,执行startx即可

设置用户自动登陆

$ sudo mkdir  /etc/systemd/system/getty@tty1.service.d/
$ sudo vim /etc/systemd/system/getty@tty1.service.d/override.conf
# 将以下内容写入文件保存
# ------------------start---------------------
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin sql %I $TERM
Type=idle
# ------------------end---------------------

设置浏览器自启动

编写启动脚本

启动浏览器需要有X11的支持,借鉴startx的思路:先启动xserver,再启动client;其实把client部分换掉就行了。

$ cd /usr/bin/
$ sudo cp startx mystartx
$ sudo vim mystartx

mystartx中找到这段内容:

xinit "$client" $clientargs -- "$server" $display $serverargs

在它前面插入:

client=/usr/bin/chromium-browser
clientargs=" --start-maximized --start-fullscreen --disable-session-crashed-bubble http://www.u396.com"

设置自启动

打开~/.bashrc文件,在最后追加一下内容:

cc=`ps axuw|grep chromium-browser|wc -l`
xc=`ps axuw|grep xserver|wc -l`
echo "chromium-browser process:${cc}, x11 server process:${xc}"
if [ $cc -lt 2 ] && [ $xc -lt 2 ]; then
       	/usr/bin/mystartx	
fi

结束语

折腾了几个小时,重启服务器,面子上算是搞定,其中的问题欢迎大家指正。一直以来主要用centos,最后一次使用ubuntu大概十年前了,记得当时免费申请光盘,要了一箱,送给同学,然而没送出去几套,不禁有些感慨。当年在学校时,在大牛民工于某的影响下,几个发行版都玩了玩,其中印象比较深还有Magic,中文支持比较好,现在不知道怎么样了。

作为程序员最应该阅读的21本书籍

Stack Overflow上有网友提问,每个程序员应该阅读的最具影响力的书籍有哪些?他说:“如果能够回到以前,作为一个开发者,告诉自己在开始自己的职业生涯时应该阅读那些书籍,我希望这个列表内容丰富,涵盖范围广泛”。问题得到广大网友的积极响应,整个过程得到了213个回复,最终投票得出了94本有价值的书籍。我们摘取前21本书推荐给大家。 继续阅读

语义化版本(SemVer)的范围

在使用 Node.jsBower 的时候,其中的 package.jsonbower.json 都会有 dependenciesdevDependencies 项,对于此前端开 发的童鞋应该会比较熟悉。这里面是运行时和开发时依赖库,其中依赖库对应的版本号有很多种写法,诸如:”~1.0.2“, “^1.0“, “>=1.0.2“等,其实可以猜测这种写法代表了某种范围,至于具体含义本文给大家做详细解释。

语义化版本格式

我们首先简单了解一下语义化版本版本号,标准的版本格式为:X.Y.Z,其中:
X:主版本号,当我们做了不兼容或者颠覆性的更新,修改此版本号。
Y:此版本号,当我们做了向下兼容的功能性修改,修改此版本号。
Z:修订号,当我们做了向下兼容的问题修正,修改此版本号。
其中XYZ必须为非负整数,禁止数字前补零,每个数值都是递增的。 继续阅读