Linux信息亭 | Ubuntu Kiosk
This article is written for those who need a Linux based kiosk with both touch input (virtual keyboard) and remote desktop (VNC) capability that provides a web application to serve pages and user interactions for customers.
↑ English video tutorial / 英文版视频教程
简而言之,既然任务是做一台单用途信息屏,依然不喜Windows的复杂和玄学(外加版权问题),小目标就是尽量用Linux达到。从用户基数比较大的发行版里挑,UI比较良心的就是Ubuntu了,而Ubuntu里比较可靠的就是一直以来的LTS版本了,然后LTS里最新的就是18.04 LTS —— 得嘞,就是它了。
鉴于Linux权倾朝野,无人不知无人不晓,部署Ubuntu的过程就此略去不提,填入非root用户名叫kiosk。装完后登进去,先整体更新系统。
1 |
sudo apt update && sudo apt dist-upgrade |
然后装必要的几个关键包。
1 |
sudo apt install vim-nox openssh-server chromium-browser x11vnc slick-greeter |
用途如下
- vim-nox,非必须,常用nano替代,之所以装这个纯属笔者更习惯vim。因为debian/ubuntu默认vim操作起来有乱码,装了vim-nox之后会正常。
- openssh-server,推荐装。Kiosk一旦配好之后,桌面不见,没有ssh就只能用键盘Ctrl+Alt+F2~6来切tty,操作极其不便。
- chromium-browser,必装,只要不是内存吃紧,用chrome/chromium浏览器,前端工程师一定会感谢你的。产品出去见了客户,用久了不掉坑,你也会感谢自己的。替代品是Ubuntu自带的firefox,但建议是chromium。
- x11vnc,让kiosk可以提供远程桌面服务,需要的话那就是必装。kiosk装出去,看不见摸不着,现场工程师也没个键盘鼠标,难以电话遥控解决。如果客户反馈问题,只有个ssh命令行还是差点意思。但如果能远程桌面,接上网线/WiFi就如研发亲临,没说的,不是吗?
- slick-greeter,这货一眼看上去,无比陌生,为啥要装这个。实际上她是Ubuntu 16时代的默认display manager,名叫lightdm。而Ubuntu 18的默认DM是GDM3,之所以切换回lightdm,是为了更方便配置auto-login和vnc。切换起来也是非常容易,命令行装这个包的时候会弹出界面,按↓选择lightdm确定就好。
接下来把chromium一些恼人的设置禁用掉,比如提示存储密码,比如提示翻译页面内容、拼写检查等等,不一而足。
接下来要设定几个关键的配置文件。
首先 sudo nano /etc/lightdm/lightdm.conf (也可使用前边装好的vi)
允许用户kiosk自动登录,并设置了欢迎界面。内容如下:
1 2 3 4 5 |
[SeatDefaults] autologin-user=kiosk autologin-user-timeout=0 user-session=ubuntu greeter-session=unity-greeter |
接下来 sudo nano /etc/lightdm/lightdm.conf.d/50-myconfig.conf
同样是自动登录相关配置。配置内容:
1 2 |
[SeatDefaults] autologin-user=kiosk |
第三个是 sudo mkdir /home/kiosk/.config/autostart && sudo nano /home/kiosk/.config/autostart/kiosk.desktop
这个配置定义了当用户通过自动登录登进系统后,会自动触发什么程序执行。
1 2 3 4 5 |
[Desktop Entry] Type=Application Name=Kiosk Exec=/home/kiosk/kiosk.sh X-GNOME-Autostart-enabled=true |
细心的小伙伴会发现,登录后上一个脚本触发的是这个kiosk.sh,那么最后一个配置文件要把这个搞出来。
nano /home/kiosk/kiosk.sh 这次内容长一点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash # 指定被操作的显示 export DISPLAY=:0 # 开启x11vnc服务 /usr/bin/x11vnc -create -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -rfbauth /home/kiosk/.x11vnc.pass -forever -rfbport 5905 & # 如果chromium被杀,或者机器掉电关机,别让chromium报告上次异常退出 sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/kiosk/.config/chromium/Default/Preferences sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/kiosk/.config/chromium/Default/Preferences # 以kiosk模式开启chromium(没地址栏,状态栏,书签栏等),打开微软必应 /usr/bin/chromium-browser --kiosk http://bing.com & |
细心的小伙伴再次发现,x11vnc一行有个密码存储文件叫做 /home/kiosk/.x11vnc.pass 因此我们要把他准备好。
命令 x11vnc -storepasswd kiosk#2019 .x11vnc.pass 其中kiosk#2019就是vnc连接密码(可以不同于kiosk用户密码)。
现在可以整机重启,接下来就是见证奇迹的时刻。
自动登录成功了,但系统弹出了一个黑框要求login keyring,并且软键盘还没有开启。
【注】以下步骤如果提前完成,则可一次重启成功;如此讲解仅为配合视频的操作顺序。
没关系,先用ssh(截图里前边的命令行窗口)登进机器,杀掉chromium进程(使用kill或者pkill),得到lightdm桌面。
在系统程序中搜索password,会得到小钥匙图标,叫做passwords and keys,打开,接下来按图索骥。
最后解决软键盘的问题,这个就容易多了,打开系统settings,找到Universal Access,打开Screen Keyboard即可。
再次重启机器,我们甚至可以用触摸屏和软键盘测试输入速度了……
至此kiosk和触屏输入功能全面完成,还剩下一项就是vnc的测试。
鉴于我们在kiosk.sh脚本里选用的端口是5905,那么从Windows/mac采用vnc viewer连接时的地址应该是<kiosk ip>:5。
连接地址是192.168.1.26:5,实际vnc viewer请求的端口就是5905,如果只填IP,就会请求kiosk机器的5900端口。
Win10上的vnc viewer可以很顺畅的操作kiosk的软键盘继续打字游戏,那么,大功告成!
以下致谢参考来源:
https://askubuntu.com/questions/767752/x11vnc-and-lightdm-on-headless-16-04
https://blog.csdn.net/qyanqing/article/details/9344161
文章的脚注信息由WordPress的wp-posturl插件自动生成