Ubuntu不启动桌面仅启动一个应用

Ubuntu不启动桌面仅启动一个应用


背景


系统集成的工作使用一些嵌入式开发板进行UI开发,此时最好不启动桌面,仅启动一个进程。

系统


开发板:

米尔MYD-YA157C-V2

https://item.taobao.com/item.htm?spm=a230r.1.14.16.74fe7bb7oF9dxE&id=609796292798&ns=1&abbucket=8#detail

系统:

myir@linux:~$ uname -a
Linux linux 4.19.9 #1 SMP PREEMPT Wed Jan 8 08:09:26 UTC 2020 armv7l armv7l armv7l GNU/Linux
myir@linux:~$ cat /etc/issue
Ubuntu 18.04 LTS \n \l

UI进程:

主程序是:
https://github.com/fyne-io/fyne/tree/master/cmd/fyne_demo

UI编译过程

编译工具:
https://github.com/lucor/fyne-cross

docker代理:

在systemd的docker.service内,Service段增加代理配置:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:2081"

systemctl restart docker

本机golang代理:

配置本机环境变量,启用GO的代理(国内程序员的悲哀):
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

交叉编译:

然后按照fyne-cross官网安装fyne-cross

进入fynd_demo目录后,运行:
fyne-cross linux -arch=arm -env GO111MODULE=on -env GOPROXY=https://goproxy.cn -env GO111MODULE=on
即可交叉编译成功,二进制文件在fyne-cross/bin目录内

关闭默认X进程

找到startx相关命令,注释(或者有可能是systemd进程)

此开发板米尔官方提供的程序在:

/usr/bin/watchdog.sh

添加systemd配置

文件:

/etc/systemd/system/user-program.service

[Unit]
Description=User Screen Daemon

[Service]
Type=simple
User=root
Restart=always
RestartSec=5s
ExecStart=/usr/bin/xinit /home/myir/examples -- /usr/bin/X :0
StartLimitIntervalSec=2
StartLimitBurst=0
RestartSec=2

[Install]
WantedBy=multi-user.target

注意要用root启动,需要在应用中分配权限;必须指定Service中的最后三项,保证一直连续重启服务(HDMI如果没有插,那么此服务会失败)。

用户程序是/home/myir/examples,可以修改为其它二进制文件。

修改启动用户权限

/etc/X11/Xwrapper.config

allowed_users=anybody

原理及相关文档

X11是第11版的X程序,系统实现的是客户端和应用端。

我们使用的Linux桌面系统都是基于X11的,所以只要换到中间的桥梁部分就行了(这个板子是xfce4。

https://en.wikipedia.org/wiki/X_Window_System

https://wiki.archlinux.org/index.php/Xinit

https://docstore.mik.ua/orelly/linux/run/ch11_01.htm

https://unix.stackexchange.com/questions/437809/start-x-server-on-login-with-systemd

Комментарии

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×