因需要多人同时登录到机器人的Ubuntu主机调试,于是安装VNC,不记得N年以前怎么做的了,于是按照网上某文说的先:
sudo apt-get install xfce4(插一句:也可以安装xubuntu,不使用Ubuntu默认的unity桌面,而使用Ubuntu+xfce4或xubuntu是为了在vnc连接下远程操作桌面能性能好些,关于ubuntu xfce vs xubuntu的对比,请看https://www.lifewire.com/ubuntu-15-04-vs-xubuntu-15-04-2201174)、vnc4server、xdrp (或者sudo apt install xfce4 xfce4-goodies tightvncserver),这里步骤没问题,然后启动vncserver并设置vnc密码:
sudo vncserver
再修改 ~/.vnc/xstartup文件(这个文件在安装完后是没有的,在启动vncserver时生成的,这就是为何需要先启动vncserver)
再重启vncserver和xrdp:
sudo vncserver -kill :1
sudo vncserver
sudo service xrdp restart
上面步骤就有问题了!vncserver是启动了,在另外的机器人上安装的vnc viewer也可以登录连接上来了,但是在Ubuntu主机重启后,发现怎么也登录不进桌面了!输入口令后黑屏然后过一会儿又回到了登录界面,就是网上说的安装vnc后造成循环登录进不去桌面的问题,按CTRL+ALT+F2进入文本模式,然后登录进入后查看~/.xession_error文件,发现:
openConnection: connect: no such file or directory
cannot connect to brltty at :0
后面一堆进程被kill的提示,查了一下网上别人遇到这个循环登录问题时的解决办法,说原因是vnc启动后把 ~/.Xauthority文件的owner:group改成了root:root,一查看还真是的,于是按CTRL+ALT+F2进入文本模式,然后登录进入,然后以su身份把owner和group改成平时登录用的用户,结果发现还是登录不了,给普通用户加chmod +w 也不行,为么?郁闷,不甘心,还有没有其他文件需要改?折腾了一阵其他办法没结果后,回头再仔细看了一下,~/下还有个.ICEauthority文件的owner也能改成了root,试着修改成普通用户,然后重启以普通用户登录,果然可以进入桌面了!也就是说,需要把/home/<user>/下的 .Xauthority和 .ICEauthority的owner:group都改成普通用户才行!
那为何运行vncserver会把owner改掉呢?感觉应该是执行命令时使用了sudo的原因,网上查到一篇ubuntu下以sudo方式运行图形界面应用可能引起问题的文章:https://www.psychocats.net/ubuntu/graphicalsudo 说得非常明白,一般的graphical application以sudo方式运行的话没问题,有些就不行,会修改.ICEauthority的权限导致登录不进去桌面,需要使用gksudo或kdesudo来运行才没问题,对图形应用,作者建议不要使用sudo运行,唉,于是猛然记起来,其实不能以sudo运行图形应用这样的问题以前在使用Fedora时也遇到过,只是一下没想起来。
既然确认是sudo引起的祸害,那我不要它以普通用户身份启动vncserver不就可以了?试了一下,确实可以,不会造成文件权限被修改问题,也就没有登录问题了。
我猜测,那些在文章里向别人说以sudo vncserver启动vncserver的作者肯定始终是以root身份登录的,不然他们肯定会遇到上面的循环登录问题。
附:卸载xfce4桌面图形化安装ubuntu-desktop Unity桌面和VNC Server的过程:
#卸载掉xfce
apt-get update && apt-get upgrade
apt-get remove xrdp
apt-get remove xfce4*
apt-get autoremove xfce4*
#安装Unity桌面和用于VNC Viewer等终端等图形界面显示(如果不安装gnome-panel...这些包,VNC Viewer终端连到VNC Server后显示灰屏并且鼠标为x型)
apt-get -y install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal firefox
apt-get install xrdp vnc4server
vncserver #先启动vncserver以生成~/.vnc/xstartup文件
vncserver -kill :1
vi ~/.vnc/xstartup
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &
保存xstartup文件后执行
vncserver :1
启动VNC Server后,即可使用VNC Viewer连接。
VNC输入登录密码后出现 failed to start session,这实际上是ubuntu-desktop没有安装,安装桌面:
apt-get install ubuntu-desktop
service lightdm restart
#解决root没有出现在登录界面
#vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
vi /usr/share/lightdm/lightdm.conf.d/50-unity.conf
greeter-show-manual-login=true
#restart Ubuntu
vi /root/.profile
tty -s && msg n ||true
#登录不了发现错误与pam_kwallet有关:
service lightdm statsus
PAM unable to dlopen(pam_kwallet.so): /lib/security/pam_kwallet.so: cannot open shared object file: No such file or directory
查看/etc/pam.d/lightdm-greeter:
auth required pam_permit.so
auth optional pam_gnome_keyring.so
auth optional pam_kwallet.so
auth optional pam_kwallet5.so
#解决办法
apt-get install libpam-kwallet4 libpam-kwallet5
Greeter start authentication for guest account
Session: Failed during authentication
#解决办法:
rm ~/.Authority
#Unity VNC设置
export XKL_XMODMAP_DISABLE=1
查看/usr/share/gnome-session/sessions/下看桌面session的名称,假设是Ubuntu则将最后一行改为:
export STARTUP="/usr/bin/gnome-session --session=ubuntu"
$STARTUP
ubuntu16.04任务栏和菜单栏消失问题:
1)sudo apt-get install compizconfig-settings-manager #这个只适用于16.04之前的版本;
2)重新安装desktop并不能解决问题。
3)在https://askubuntu.com/questions/17381/unity-doesnt-load-no-launcher-no-dash-appears里的答案:
删除 ~/.cache文件夹,重启可解决问题