阿里云ECS服务器CentOS6.5vnc连接时报错Failed to connect to socket /tmp/dbus
问题:
通过tightvnc远程连接阿里云服务器CentOS6.5,一直都可以正常连接,突然开始报错:
Failed to connect to socket /tmp/dbus-xxxxxxx: Connection refused
注意:
以下命令都是以root执行的(不好意思,这不是好的做法),如果以其他用户执行某命令遇到没有管理员权限问题,可以给该用户设置sudo权限,同时该命令前加sudo (sudo加一个空格)
排查:
搜了一堆文章,改来改去,这种情况依然存在,包括但不限于:
卸载重装所有图形界面模块
卸载重装dbus
重启messagebus
重启haldaemon
重启vncserver
由于修改太多太混乱,一度导致ECS服务器网卡异常,彻底断网,无法从公网连接,也无法连接公网,ping公网ip和内网ip全都失败,只能在网页控制台登录,此时登录后直接是Gnome图形界面。
无奈只好提交工单请阿里工程师处理,工程师快速处理之后,网的问题解决了,十分感激,但是控制台登录时,已经不再是图形界面,而是只有文字界面,dbus的问题还是存在
vim ~/.vnc/<机器名>:1.log
里面有关的报错行类似如下:
(拷贝自https://superuser.com/questions/259943/vnc-error-could-not-connect-to-session-bus-failed-to-connect-to-socket)
gnome-session[24880]: WARNING: Could not make bus activated clients aware of DISPLAY=:1.0 environment variable: Failed to connect to socket /tmp/dbus-FhdHHIq8jt: Connection refused gnome-session[24880]: WARNING: Could not make bus activated clients aware of GNOME_DESKTOP_SESSION_ID=this-is-deprecated environment variable: Failed to connect to socket /tmp/dbus-FhdHHIq8jt: Connection refused gnome-session[24880]: WARNING: Could not make bus activated clients aware of SESSION_MANAGER=local/dell:@/tmp/.ICE-unix/24880,unix/dell:/tmp/.ICE-unix/24880 environment variable: Failed to connect to socket /tmp/dbus-FhdHHIq8jt: Connection refused
一度有点绝望,最后决定谷歌gnome-session failed to connect to socket /tmp/dbus Connection refused
然后看到这篇文章
Failed to connect to socket /tmp/dbus
https://answers.launchpad.net/awn/+question/22358
受到最后的几段讨论启发,去检查DBUS_SESSION_BUS_ADDRESS和 DISPLAY 环境变量,发现都是空的,
不过,执行 ll ~/.dbus/session-bus
,看到下面列有两个bus,其中一个是
-rw-r--r-- 1 root root 463 Jul 10 11:24 11f346017f03a1f2f020eb1d5b43ff07-0
查看该bus信息
vim ~/.dbus/session-bus/11f346017f03a1f2f020eb1d5b43ff07-0
显示如下
# This file allows processes on the machine with id 11f346017f03a1f2f020eb1d5b43ff07 using # display :0 to find the D-Bus session bus with the below address. # If the DBUS_SESSION_BUS_ADDRESS environment variable is set, it will # be used rather than this file. # See "man dbus-launch" for more details. DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-uDlyk8CP1w,guid=e5202dfdf43974524422e7970000004a DBUS_SESSION_BUS_PID=2754 DBUS_SESSION_BUS_WINDOWID=8388609
我觉得我的系统显示设置没问题,因为putty可以远程ssh登录,DISPLAY环境变量应该至少为0或1,DISPLAY不应该为空。
另外,我感觉dbus本身存在且没问题,所以DBUS_SESSION_BUS_ADDRESS环境变量应该是非空的
我感觉系统的显示,图形系统,dbus, vncserver这些配置本身都没问题,有问题的只是内存中的环境变量DISPLAY和DBUS_SESSION_BUS_ADDRESS不知道为什么是空的
这时终于看到这篇
Anaconda kills dbus session login manager on opensuse leap 42.3
https://groups.google.com/a/continuum.io/forum/#!msg/anaconda/ZB8DoK0tY70/cUdp8hXdAAAJ
看到其中提到Anaconda在./bashrc里面启动,毁掉dbus,导致用户无法重新登录
解决
我看了自己的~/.bashrc以后,发现里面也有Anaconda安装时添加的几行,
所以果断注释掉,
vim ~/.bashrc
# .... 其他配置略去 # added by Anaconda3 installer #export PATH="/user/local/anaconda3/bin:$PATH" #. /user/local/anaconda3/etc/profile.d/conda.sh #conda activate
执行source ~/.bashrc
之后重启服务器,vnc终于可以重新登录了
关于conda的启动关闭
现在,在我禁止anaconda开机执行bashrc内的有关命令后,重启了好几次服务器,发现可以直接执行conda命令,不需要额外操作。
如果重启服务器后,需要用conda时,发现找不到conda,则可以执行
. /user/local/anaconda3/etc/profile.d/conda.sh
conda activate
这时,终端提示符前会加(base)
,例如
(base) [root@awesomeserver grav-skeleton-x-corporation]#
用完conda以后,则需要及时关闭conda,避免发生后续在conda虚拟环境中安装的东西只能在该虚拟环境中使用,脱离该虚拟环境则无法使用
conda deactivate
这时终端提示符会恢复正常,例如
[root@awesomeserver grav-skeleton-x-corporation]#
总结
1 自从上上周接手服务器以来,就在不停地安装配置各种模块,但是一直没有重启服务器,今天不得不重启服务器,结果重启以后就发现了严重问题。看来安装一个服务之后,如果有条件,应该立即重启服务器,就能提早看到真相。
2 操作要谨慎,在修改配置文件前,应该备份原来的那份。
FAQ问答
qq_39044755提问:
怎么找到conda在哪里?
回答:
首先,查看是不是已经安装了anaconda
你可以执行 whereis anaconda
,
如果安装了,会有显示路径,比如:
anaconda: /usr/share/anaconda
也可以执行conda -V
,
如果安装了,会有显示版本号,比如:
conda 4.5.4
如果安装了anaconda,而且是用当前用户安装的,可以打开bashrc看下,
执行vim ~/.bashrc
,查看anaconda安装时写入的内容
# added by Anaconda3 installer export PATH="/user/local/anaconda3/bin:$PATH" . /user/local/anaconda3/etc/profile.d/conda.sh conda activate
如果安装了anaconda,但是是别的用户安装的,需要找到是哪个用户,登录那个用户,编辑bashrcvim ~/.bashrc
,查看anaconda安装时写入的内容
关于怎么找到那个用户,
可以执行find / -name anaconda
/usr/share/anaconda /user/local/anaconda3/pkgs/anaconda-client-1.6.14-py36_0/bin/anaconda /user/local/anaconda3/bin/anaconda
列出anaconda可执行文件的详细信息
执行ll /user/local/anaconda3/bin/anaconda
可以看到可执行文件的用户和用户组等信息
-rwxrwxr-x 1 root root 245 Jun 29 14:35 /user/local/anaconda3/bin/anaconda
可以看到用户是root
然后登录root,
再执行 vim ~/.bashrc
但是,如果没安装anaconda, 那么就不是anaconda引起的,是其他原因,这篇文章介绍的方法则不适用你的情况,你需要继续搜。
好运!