阿里雲ECS服務器CentOS6.5vnc連接時報錯Failed to connect to socket /tmp/dbus-xxxxxxx: Connection refused

問題:

通過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引起的,是其他原因,這篇文章介紹的方法則不適用你的情況,你需要繼續搜。

好運!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章