Ubuntu无法打开图片和pdf

作者详细记录了解决Ubuntu10.04因添加不兼容软件源导致的依赖关系冲突和系统功能异常的过程,包括使用命令行工具更新系统、修复依赖关系、解决文件打开问题等步骤。

我用的是Ubuntu10.04,之前一直用的好好的,只是前段时间手贱,为了安装一个无聊的软件,添加了一个源:

deb http://cz.archive.ubuntu.com/ubuntu precise main

结果导致系统软件版本冲突,

依赖关系得不到满足,无法再安装任何软件,更新管理器也无法弹出来。

将就着用了一段时间,后来实在受不了了,于是上网搜索,得到了一个解答:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get -f install

我也不管三七二十一,照着做了。折腾了好久,自动下载了一堆软件。但由于有个较新的源,与10.04不太兼容,问题依旧

其中不满足依赖关系的有
libsounda

nautilus 

gnome-bluetooth

ppp

....

我不太记得了。

我更是把gnome-bluetooth删除了,又连带要删除其他一大堆东西,结果把gnome也弄出问题了,现象为:

双击jpg文件无法打开,evince无法打开pdf文件,nautilus文件管理器没有标题栏,既无法拖动,也没有“最小化,最大化,关闭”那三个按钮。


于是只好再上网找原因。发现一篇文章,是说可能是软件源冲突造成的。我查看了 /etc/apt/sources.list ,发现除了最后一个源以外,其他的源

的地址上都带有 "lucid" ,而10.04的代号为Lucid Lynx,也就是说,带有lucid的源是可靠的源。于是我把最后那个源注释掉。然后

sudo apt-get update

更新管理器马上弹出来了。

心里那个轻松啊!!!那些依赖关系完全满足了,也可以安装软件了。


但是,等等,那些

双击jpg文件无法打开,evince无法打开pdf文件,nautilus文件管理器没有标题栏,既无法拖动,也没有“最小化,最大化,关闭”那三个按钮。

还是存在。

再上网查,得到一个解答,用metacity --replace可以把标题栏弄出来,试了一下,果然!


接着再解决jpg文件的打开问题。

由于在文件管理器里双击的时候,只得到一个打不开的结果,看不到任何其他信息,所以如果能在终端里用命令打开,或许可以有出错信息。

但我又不知道用什么命令打开图片,只好再上网查找,发现命令是 eog,即 Eye of GNOME,试一下:

eog linux.jpg

终端上显示 无法打开文件 libjpeg.so.62 : No such file or directory

我想肯定是我之前在删除gnome-bluetooth时连带删除了这个文件

但是eog从哪里搜索这个文件呢?或者说ubuntu系统会搜索哪个路径来给应用软件提供这个库呢?

于是强大的 strace 又派上用场了:

strace -o jp eog linux.jpg

运行之后,马上得到文件jp,它记录了软件访问过哪些地方。文件不大,因为它一开始就去找libjpeg.so.62,但没找到,很快就退出了。

用vim打开它,发现它记录了一大堆路径,都是在那里去open库文件libjpeg.so.62的,但全部返回 No such file or directory。

我把这些路径全部提取出来,见下面的列表:

/lib/tls/i686/sse2/cmov/libjpeg.so.62
/lib/tls/i686/sse2/libjpeg.so.62
/lib/tls/i686/cmov/libjpeg.so.62
/lib/tls/i686/libjpeg.so.62
/lib/tls/sse2/cmov/libjpeg.so.62
/lib/tls/sse2/libjpeg.so.62
/lib/tls/cmov/libjpeg.so.62
/lib/tls/libjpeg.so.62
/lib/i686/sse2/cmov/libjpeg.so.62
/lib/i686/sse2/libjpeg.so.62
/lib/i686/cmov/libjpeg.so.62
/lib/i686/libjpeg.so.62
/lib/sse2/cmov/libjpeg.so.62
/lib/sse2/libjpeg.so.62
/lib/cmov/libjpeg.so.62
/lib/libjpeg.so.62
/usr/lib/tls/i686/sse2/cmov/libjpeg.so.62
/usr/lib/tls/i686/sse2/libjpeg.so.62
/usr/lib/tls/i686/cmov/libjpeg.so.62
/usr/lib/tls/i686/libjpeg.so.62
/usr/lib/tls/sse2/cmov/libjpeg.so.62
/usr/lib/tls/sse2/libjpeg.so.62
/usr/lib/tls/cmov/libjpeg.so.62
/usr/lib/tls/libjpeg.so.62
/usr/lib/i686/sse2/cmov/libjpeg.so.62
/usr/lib/i686/sse2/libjpeg.so.62
/usr/lib/i686/cmov/libjpeg.so.62
/usr/lib/i686/libjpeg.so.62
/usr/lib/sse2/cmov/libjpeg.so.62
/usr/lib/sse2/libjpeg.so.62
/usr/lib/cmov/libjpeg.so.62
/usr/lib/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/sse2/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/i686/libjpeg.so.62
/lib/i486-linux-gnu/tls/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/sse2/libjpeg.so.62
/lib/i486-linux-gnu/tls/cmov/libjpeg.so.62
/lib/i486-linux-gnu/tls/libjpeg.so.62
/lib/i486-linux-gnu/i686/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/i686/sse2/libjpeg.so.62
/lib/i486-linux-gnu/i686/cmov/libjpeg.so.62
/lib/i486-linux-gnu/i686/libjpeg.so.62
/lib/i486-linux-gnu/sse2/cmov/libjpeg.so.62
/lib/i486-linux-gnu/sse2/libjpeg.so.62
/lib/i486-linux-gnu/cmov/libjpeg.so.62
/lib/i486-linux-gnu/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/i686/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/tls/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/i686/libjpeg.so.62
/usr/lib/i486-linux-gnu/sse2/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/sse2/libjpeg.so.62
/usr/lib/i486-linux-gnu/cmov/libjpeg.so.62
/usr/lib/i486-linux-gnu/libjpeg.so.62

正好系统里有路径 /lib/tls/i686/cmov,它里头全部是共享库文件,那我只要把libjpeg.so.62放到这个目录下应该就好了。

但我要上哪里去弄到libjpeg.so.62呢?我想系统里头的/usr目录下应该有,那就搜索吧:

find /usr -type f -name "*libjpeg.so.62*"

得到一个结果:

/usr/lib/i386-linux-gnu/libjpeg.so.62.0.0

那就把这个文件复制到 /lib/tls/i686/cmov吧,更好的办法是建立一个link,即

cd /lib/tls/i686/cmov

sudo ln -s /usr/lib/i386-linux-gnu/libjpeg.so.62.0.0 libjpeg.so.62

然后eog就可以正常打开图片了。

再解决evince打开pdf的问题,不过此时双击pdf文件,evince已经能工作了。看来也是由于libjpeg.so.62的问题


这是2014年的第一篇博文,记录了对ubuntu的折腾。

UbuntuKylin 14.04快出来了,到时候装到家里的笔记本

~~~~~~~~~~~~~~~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值