遇到的问题

我有一台安装了manjaro的mini主机,大部分情况都没连显示器,作为一台服务器,少部分情况会连接显示器(一般发生在网络被玩崩了后)。 由于在不连接显示器的情况下,我偶尔也想用一用它的桌面,所以我安装了tigervnc。 遇到了的问题:启动vncserver :1后,客户端虽然可以连上vnc,但会卡在锁屏loading界面,然后过一会就黑屏了。后面尝试断开重连vnc也是黑屏。

导致问题的原因

我想到可能是session的问题,所以尝试把sddm关了(systemctl stop sddm),果然vncserver就可以正常使用。所以此时,我的解决方案是:

sudo systemctl stop sddm vncserver :1

但是我又发现了一个问题:如果把sddm关掉,wifi就会断开。(就算连接网线,之前还是遇到了如果关掉sddm,再重启路由器,主机不会自动连上路由器)。

找到解决方案

查到了这个youtube视频才找到原因:因为sddm已经用当前用户登录了session,所以再尝试用vncserver创建一个新的session显然是不行的。所以我们有以下三种方案:

  • 方案一: 创建一个新的用户,例如vncuser,专门用于vnc登录。
  • 方案二:关闭sddm自动登录,让vncserver开机自启,替代sddm登录。
  • 方案三:使用诸如x0vncserver的替代品,直接转发当前session。

选择方案

方案一的问题是文件权限,如果我们用另一个用户登录,那么用它进行操作的话,会影响到文件权限。
方案三我目前还没有尝试成功,貌似要转发session的话,必须要先连上显示器,输入密码登录该session。 所以我这里选择了方案二。

只需要两步操作:

  1. 关闭自动登录(注意:只能在连接显示器的情况下进行这步操作,在vnc远程桌面里操作不成功)关闭自动登录
  2. vncserver开机自启:
sudo systemctl enable vncserver:1

完成以上操作后,无需连接显示器,重启主机,就可以用ip:5901连接vnc啦。用sudo systemctl status sddm查看sddm的状态,可以发现sddm依然在运行,只不过它没有用默认账户登录。

Tips

如果遇到网络挂了的情况(无法用vnc远程登录),连接显示器和键盘鼠标然后开机,你会发现和之前vnc的问题一样,卡在了锁屏loading界面,解决办法是:

  1. Alt + F2进入tty2。
  2. 使用账号密码登录。
  3. sudo systemctl stop vncserver:1
  4. Alt + F1回到tty1。

就可以正常进入到桌面了!