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 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,中文支持比较好,现在不知道怎么样了。

sqlplus Linux版本安装和使用

以下介绍SQLPLUS的Linux版本安装及使用,其他版本下载及文档见Oracle Instant Client Downloads

下载

我的服务器为x86-64,要找对应系统版本,打开Instant Client for Linux x86-64进入下载页面,优先考虑当前最新版本为12.2.0.1.0,选择接受许可协议“Accept License Agreement”,下载以下三个包:

  1. 必要的基础程序 instantclient-basic-linux.x64-12.2.0.1.0.zip
  2. 一些库和sqlplus可执行文件 instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
  3. 包含应用开发需要的头文件以及Makefile示例 instantclient-sdk-linux.x64-12.2.0.1.0.zip

需要登录方可下载

安装

解压压缩包

解压后会自动创建并将文件解压至instantclient_12_2文件夹,将instantclient_12_2移至/usr/local并对动态库做软连接

mv instantclient_12_2 /usr/local/
cd /usr/local/instantclient_12_2
ln -s libclntsh.so.12.1 libclntsh.so
ln -s libocci.so.12.1 libocci.so

安装 libaio

sudo yum install libaio

设置环境变量

echo 'export LD_LIBRARY_PATH=/usr/local/instantclient_12_2:$LD_LIBRARY_PATH' >> ~/.bash_profile
echo 'export PATH=/usr/local/instantclient_12_2:$PATH' >> ~/.bash_profile
source ~/.bash_profile

优化命令行使用

其实到此已经可以使用了,为了用起来更方便,我们需要安装rlwraprlwrap是一个wrapper,它接收我们输入的命令并交给我们指定的程序去执行,同时使用GNU readline库提供命令行编辑功能并且记录命令历史,将会使你的命令行用起来更加方便(主要是sqlplus太难用了)。

yum install -y rlwrap
echo 'alias sqlplus="rlwrap sqlplus"' >> ~/.bashrc
source ~/.bashrc

OK,现在可以放心去用了。

连接使用数据库

  • 连接本机数据库 sqlplus username/password
  • 连接远程数据库 sqlplus username/password@//domain:port/dbname

JVectorMap API 之 Converter

如果你对JVectorMap不太了解,请先阅读《开源JS地图插件JVectorMap介绍》。

Converter 是 JVectorMap 提供给我们把 shapefile 数据文件转化为地图数据的转化器。它是基于 Python 编写的,官方建议版本 >=2.7(貌似 3.x2.x 语法有不少区别,不要使用 3.x 以及以后版本)。另外还需要依赖库 Anyjson , GDAL 和 Shapely

Converter依赖库安装

Linux 下手动安装

# install anyjson
$ wget https://pypi.python.org/packages/source/a/anyjson/anyjson-0.3.3.tar.gz
$ tar zxvf anyjson-0.3.3.tar.gz && cd anyjson-0.3.3
$ python setup.py build && python setup.py install
# install Shapely
$ wet "https://pypi.python.org/packages/source/S/Shapely/Shapely-1.4.0.tar.gz#md5=8194c567cfdcfe0b458e041366924270"
$ tar zxvf Shapely-1.4.0.tar.gz && cd Shapely-1.4.0
$ python setup.py build && python setup.py install
# install GDAL
$ wget https://pypi.python.org/packages/source/G/GDAL/GDAL-1.11.0.tar.gz
$ tar zxvf GDAL-1.11.0.tar.gz && cd GDAL-1.11.0
$ python setup.py build && python setup.py install

继续阅读

单元测试原则清单

关于单元测试,网上多为描述具体实战和其重要性,很少针对单元测试方式和原则做进一步说明,而实际工作过程中很多开发者不知道应该测试,Jean-baptiste Rieu写了《Unit Testing Checklist: Keep Your Tests Useful and Avoid Big Mistakes》一文,他对单元测试中的原则和思想整理为一个checklist,相信对开发者有很大帮助。

1. 为何使用单元测试

它可以测试现有以及未来的功能模块,保证了代码质量。它强制你书写具有可测性,低耦合的代码。这比手工回归测试廉价的多。它将提高代码可行度,协助团队工作。

2. 测试步骤

单元测试是验证你代码的一些常用方法集合。按照下面的步骤操作是个不错的方法:

  • 写被测类的API;
  • 写一个方法测试API;
  • 实现这个API;
  • 执行单元测试;

继续阅读