彻底解决ubuntu循环登录和显卡驱动问题
徹底解決ubuntu顯卡驅動和循環登錄問題
目錄徹底解決ubuntu顯卡驅動和循環登錄問題什么是循環登錄為什么會循環登錄1. 顯卡驅動相關原因,導致循環登錄2. 改配置文件時系統環境變量被改壞,導致循環登錄3. 磁盤空間不足,導致循環登錄4. 輸入法沖突導致5. 其他正確的配置顯卡驅動顯卡驅動和內核的關系unattended-upgrade是什么?能關閉嗎?CUDA和顯卡驅動的關系正確安裝顯卡的姿勢參考
什么是循環登錄
開機/重啟后的登錄界面,分辨率變得很低,并且輸入密碼后黑屏一閃而過又重新回到輸入密碼的界面,如此循環無法跳出,俗稱“循環登錄”。
為什么會循環登錄
造成循環登錄有多種可能的原因:
1. 顯卡驅動相關原因,導致循環登錄
最常見的是,內核版本和顯卡驅動版本不兼容導致循環登錄。 例如內核升級但沒有配置支持顯卡驅動。這是本文重點關注的一類原因。
也有比較少見的,獨顯和集顯共存問題,nvidia-prime切換后可以使用:
ubuntu循環登錄巧妙處理
2. 改配置文件時系統環境變量被改壞,導致循環登錄
例如/etc/profile、/etc/environment、~/.profile,~/.bashrc, ~/.bash_profile等文件中配置PATH,原本希望append一個路徑,但卻設置成了PATH只等于這一個路徑。通常是Linux菜鳥或粗心導致。
解決ubuntu16.04循環登錄問題 這篇嘗試添加PyCharm的bin路徑到PATH,但忘記追加原有PATH的值。實際上完全沒必要添加PyCharm,Dash里搜索即可。
啟動Ubuntu時,密碼正確但是出現循環登陸的現象 這篇嘗試添加JDK的bin目錄到PATH,目測是把PATH的值改成只剩JDK的bin目錄導致進不去桌面。
Ubuntu陷入登錄循環 這篇總結貼中提到.profile文件被修改的時候寫了“錯別字”
3. 磁盤空間不足,導致循環登錄
例如/var/log或/home滿了。df -h可查看磁盤使用情況。
ubuntu14.04開機登錄死循環 該博主刪除大量無效log文件后問題得以解決。
Ubuntu陷入登錄循環 提到HOME分區滿導致。
4. 輸入法沖突導致
例如多個輸入法共存時可能觸發。
Ubuntu 登錄循環問題 這篇提到fcitx和搜狗輸入法的設定不正確導致的。
5. 其他
諸如檢查~/.Xauthority、~/.gconf等配置文件,檢查和修改權限,或者干脆刪除。
再例如檢查~/.xsession-errors文件,檢查/var/log/Xorg.0.log文件。
這類方法基本上不管用,偶爾管用也并不能讓人知道先前為什么循環登錄,有瞎搞的嫌疑。
還有提到“用adduser命令新建一個用戶,看能不能登錄進去”:
ubuntu登陸無限循環
此方法確實能夠驗證先前用戶home目錄下配置文件有問題,不過遷移用戶數據也是比較不可取的。
正確的配置顯卡驅動
顯卡驅動和內核的關系
原理上,顯卡是硬件,需要顯卡驅動的正確配置,才能夠被操作系統所管理使用;操作系統識別顯卡驅動后,對用戶態提供顯卡的使用接口。
具體到Ubuntu系統,它用的是linux內核。有意或無意的更新linux內核后,重啟的機器會默認加載新版內核,而如果內核與顯卡驅動不兼容,就導致了循環登錄。
最常見的解決思路:卸載并重新安裝顯卡驅動。新裝的驅動可以和原來版本相同,也可以是新版。然而這種做法并沒有從根本上解決問題:為什么我的內核會更新?我好象并沒有更新過內核?
一個合格的Linux用戶,應當會查看系統日志、定位報錯,并解決問題。查看了/var/log/apt/history.log,我發現了關鍵:
Start-Date: 2020-05-03 16:51:58
Commandline: /usr/bin/unattended-upgrade
Install: linux-modules-extra-4.15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic), linux-headers-4.15.0-99:amd64 (4. 15.0-99.100~16.04.1, automatic), linux-modules-4.15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic), linux-headers-4. 15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic), linux-image-4.15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic)
沒錯,unattended-upgrade,這家伙意思是自動升級,在5月3日 16:51:58悄悄的安裝了新版內核(4.15.0-99)。
有沒有辦法關掉unattended-upgrade呢?有,后文介紹。
如果保持unattended-upgrade打開,能不能讓顯卡驅動自動適配新內核?能,而且是推薦的方式(DKMS),不過也需要一番設置。
unattended-upgrade是什么?能關閉嗎?
通過man命令可以知道,unattended-upgrade在每天的cron任務(/etc/cron.daily/apt-compat)中被在隨機的時間點觸發使用,更新了內核。
對服務器而言,unattended-upgrade安裝了新版內核,安全角度來看是一件好事因為修復了漏洞;但對于使用ubuntu做深度學習訓練的人來說,這顯得多此一舉,幫了倒忙。即使不使用圖形界面而只是用ssh遠程連接使用,也會遭遇如下類似報錯:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
而此條報錯也很直白的表明了,內核版本和顯卡驅動版本不兼容,顯卡罷工了,深度學習訓練暫停了。
關閉unattended-upgrade
對付暴力的唯一辦法就是更加暴力。把unattended-upgrade關掉才能代表深度學習的正義:
關閉unattended-upgrade
在/etc/apt/apt.conf.d目錄下,查找包含Unattended-Upgrade的文件:
cd /etc/apt/apt.conf.d
ag 'Unattended-Upgrade'
我的機器上是/etc/apt/apt.conf.d/20auto-upgrades,有些機器上可能是/etc/apt/apt.conf.d/10periodic。編輯此文件,找到并修改它的取值為"0":
APT::Periodic::Unattended-Upgrade "0";
不過,關閉unattended-upgrade也只是杜絕了以后莫名其妙的被更新內核,當前已經被更新了內核而驅動版本不匹配,還是要搞一下顯卡驅動。
CUDA和顯卡驅動的關系
搞深度學習要用CUDA來加速訓練,有時候也用來部署加速。
CUDA安裝包里面帶有兼容版本的顯卡驅動。沒錯,必須搭配合適版本的顯卡驅動,才能支持CUDA,否則裝好的CUDA也永不上。
舉例:*華公司的AI集群訓練系統,物理機的顯卡驅動遲遲不肯更新,導致訓模師在2020年還只能用CUDA8這樣落后的東西。*華的sa們都在忙什么?
說回CUDA安裝包里的顯卡驅動,個人不建議安裝它。盡管它確實在多數情況下能讓CUDA正常運行起來,但是這一版本的顯卡驅動在安裝的時候不會注冊dkms模塊,這就導致一旦更新了linux內核,重啟機器后顯卡驅動再次和內核不兼容,圖形界面桌面進不去,CUDA用不了,深度學習訓練推理都罷工。
而手動從nvidia官網下載的顯卡驅動(standalone版本),是帶有dkms注冊支持功能的。在此倡議:Ubuntu系統下,請不要安裝CUDA安裝包里的顯卡驅動,請到nvidia官網手動下載.run格式的顯卡驅動,手動下載安裝。
有人會問:ppa:graphics-drivers/ppa這個倉庫不香嗎?用apt安裝CUDA和顯卡驅動不是更方便嗎?
我覺得這類用戶沒有考慮過多個版本的CUDA共存的問題,他們也不曾遇到當急需用最近版CUDA而ppa源里的顯卡驅動版本過低時的那種無奈。
正確安裝顯卡的姿勢
關閉unattended-upgrade
在/etc/apt/apt.conf.d目錄下,查找包含Unattended-Upgrade的文件:
cd /etc/apt/apt.conf.d
ag 'Unattended-Upgrade'
我的機器上是/etc/apt/apt.conf.d/20auto-upgrades,有些機器上可能是/etc/apt/apt.conf.d/10periodic。編輯此文件,找到并修改它的取值為"0":
APT::Periodic::Unattended-Upgrade "0";
獲取內核相關包
sudo apt install linux-headers-$(uname -r)
sudo apt install linux-headers-generic
禁用開源驅動nouveau
新建/etc/modprobe.d/blacklist-nouveau.conf,內容:
blacklist nouveau
options nouveau modeset=0
sudo update-initramfs -u
正確的卸載顯卡驅動
想要正確的安裝顯卡驅動,必須知道怎么正確的卸載顯卡驅動。有時候使用的機器是別人之前維護的,而前任維護者也許配置的并不合理,需要先檢查再按自己的風格配置:
.run文件安裝的顯卡驅動,卸載:sudo /usr/bin/nvidia-uninstall,或找到原始的.run文件,執行sudo bash ./xxx.run --uninstall
cuda安裝包里的顯卡驅動,卸載:sudo /usr/bin/nvidia-uninstall
apt repo下載安裝的:
sudo aptitude search nvidia | grep '^i' #查看
sudo apt remove --purge nvidia-XXX #例如我是nvidia-384
正確的安裝dkms依賴包
盡管standalone版本的nvidia顯卡驅動已經內置了注冊dkms的功能,但ubuntu16.04并不默認支持dkms。也就是說,雖然你滿心歡喜的在安裝顯卡驅動時選擇了dkms,但是某天因為unattended-upgrade更新了內核,顯卡會再次罷工。
正確姿勢:
sudo apt install dkms
查找和nvidia相關的dkms包:
aptitude show dkms | ag 'nvidia'
sudo apt install bbswitch-dkms
安裝后,得到/usr/lib/dkms_autoinstaller這一可執行文件。
正確的獲取顯卡驅動
前面提到過,不要用CUDA安裝包里的顯卡驅動,它不帶dkms支持會導致以后問題頻發。請到官網自行下載適合版本的顯卡驅動。
sudo init 3
sudo bash ./NVIDIA-Linux-x86_64-440.82.run
注意選擇dkms支持,選擇32位兼容。
正確的配置dkms
ls /var/lib/initramfs-tools | sudo xargs -n1 /usr/lib/dkms/dkms_autoinstaller start
這會把所有內核模塊打入到所有內核中。然后重啟系統即可。
如果不重啟,無線網卡和CUDA可能無法使用。
參考
NVIDIA CUDA Installation Guide for Linux,全面,但不全都正確可用
解決Driver/library version mismatch,中文博客中比較深入的一篇
Command to rebuild all DKMS modules for all installed kernels?,啟發了我找到dkms的正確配置方式
ubuntu 禁止/取消系統自動更新的方法
總結
以上是生活随笔為你收集整理的彻底解决ubuntu循环登录和显卡驱动问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux如何编译wine,利用wine
- 下一篇: Navicat for MySQL破解版