问题背景
某天点击Ubuntu桌面左侧收藏夹中的终端图标时,发现无法打开终端,每次只能从文件窗口右键点击打开终端进行开启,与此同时还有其他桌面图标,系统设置(语言和区域)无法打开相应的界面
排查过程
桌面图形化界面开启本质上也是执行某个命令,出现这种情况通常是命令执行过程中出现异常,所以执行终端的启动命令"gnome-terminal"尝试开启,此时报错
no module named 'gi'
所以这个报错就是导致桌面图标无法打开应用的界面的直接原因。
尝试安装缺少的模块,pip install gi,此时又报出另一个错误:
return Command 'lsb_release -a' returned non-zero exit status 1
在终端直接执行lsb_release -a
报错
no module named 'lsb_release'
报错文件位于/usr/bin/lsb_release。所以,这个问题的表面原因就是/usr/bin/lsb_release这个文件无法import lsb_release模块。
根据/usr/bin/lsb_release文件第一行
#! /usr/bin/python3 -Es
可以知道lsb_release命令是依赖python3执行的,在本机执行python3命令后进入python3.7解释器,这个python3.7解释器属于conda下面,里面没有所需的gi和lsb_release模块,所以会报出找不到模块的错误,这是这个问题的根本原因!
python3.7的出现是因为安装了conda,把系统原有的软连接/usr/bin/python3重新链到了python3.7,而系统原有的/usr/bin/python3软连接指向python3.6,所需的模块依赖都在python3.6的pip管理下。因此,产生这个问题是因为python3.7的安装打乱了python解释器的应用和依赖。
解决办法
重新建立软链接到系统原python3.6即可
sudo rm -f /usr/bin/python3
sudo ln -s /usr/bin/python3.6 /usr/bin/python3
此外还有另外一种解决办法:https://github.com/pypa/pip/issues/4924
有时间可以去验证一下