显示标签为“ubuntu”的博文。显示所有博文
显示标签为“ubuntu”的博文。显示所有博文

2013年3月6日星期三

Ubuntu在Mac下的网络故障

Ubuntu(Macbook Pro 8,2)在一次例行升级后,以太网开始失效,ping办公室的网关时候就出现Destination Host Unreachable的错误。检查路由没有异常,抓包看不到任何ICMP包,怀疑是系统bug。

办公室的Wifi很差劲,为了工作只好切换到OSX下。OSX下工作环境没有配置完整,而且安装相关的开发环境很不方便,回头还是切回Ubuntu,但Ubuntu网络还是不能用,Wifi很卡。这两周来来回回切换,影响工作效率。

今天试了试Ubuntu的恢复模式,发现在单用户下网络是可以用的。遂把故障定位到GNOME桌面,认为是GNOME下网络有问题。就在单用户模式下装了个KDE,进去后结果还是有问题。后来想到试试内核模块,这个网卡用的模块是tg3,我rmmod之后再modprode,结果网络就好了。

折腾了这么久,其实重新加载内核模块的方法我早就用过了。还是这台Mac这个Ubuntu,以前Wifi用着用着就断了,我就用重新加载内核模块的方法了,出问题时候执行一个叫reset-wifi的脚本:
#! /bin/bash
# Reload Wifi module
sudo rmmod b43
sudo rmmod bcma
sudo modprobe bcma
可是这次有线网络出问题,我竟然折腾了这么久才找到个解决办法。

2012年10月6日星期六

自动挂载存储卡的问题

弄了一个4GB的Micro SD卡,可以把手机上2GB的升级了。把手机用USB存储模式连接到电脑,SD卡没有自动挂载,就用mount /dev/sdb1 /mnt挂载了,然后用tar把卡上的内容打包。把新卡换到手机上,再用tar把打包的内容释放到新卡上,但是发现原来的中文文件名字,在压缩包里面显示的是一串问号?,导致解压失败。

因为存储卡是VFAT文件系统的,想起默认的mount会有编码问题,但是懒得查mount选项了,就想搞定自动挂载,因为Ubuntu会对VFAT的移动设备自动挂载,会设置一系列参数,不会出现编码问题。

在Ubuntu的官方文档看到自动挂载udisks实现的,我只好手动试试:
/usr/bin/udisks --mount /dev/sdb1
结果出错,说是
Mount failed: Error mounting: mount exited with exit code 1: helper failed with:
mount: only root can mount /dev/sdb1 on /mnt/pi
看到那个/mnt/pi就知道原来是我在fstab文件里面写了/dev/sdb1的条目,所以udisks没有自动挂载,把这个条目注释后,就可以自动挂载了,而且也没有文件名乱码了。自动挂载的参数是:
/dev/sdb1 on /media/595B-BB30 type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
自动挂载设定了好多有用的参数,比手动挂载方便多了,utf8=1应该就是处理编码问题的选项。

2012年9月1日星期六

NetworkManager和Upstart

Ubuntu桌面下,网络是由NetworkManager管理的。NM很好用,但是有时要配置复杂网络,只能用interfaces等网络配置文件搞定。

我给eth0设置了静态IP,用于办公室环境(其实也是DHCP网络)。回家之后这个静态IP得不到,开机的时候会等待2分钟时间让网络起来,先显示:
Waiting for network configuration...
1分钟后是:
Waiting up to 60 more seconds for network configuration...
最后是:
Booting system without full network configuration...
这在Launchpad上有N个bug报告。之后进入Ubuntu,interfaces文件没有生效,而且NM都没自动启动呢。来分析一下这个问题。

现在的Ubuntu在/etc/init.d下,System V Init任务和Upstart任务都有。如果是Upstart任务,则都链接到/lib/init/upstart-job,如NM:
tux@macbook:/etc/init.d(0)$ ls -l network-manager
lrwxrwxrwx 1 root root 21 May 25 12:01 network-manager -> /lib/init/upstart-job
开始我看到NM在/etc/rc?.d下没有启动脚本,就用update-rc.d创建了链接,但还是不能自动启动。后来才明白Upstart任务的启动和停止控制不在/etc/rc?.d目录下,而是在/etc/init目录。NM的配置文件为/etc/init/network-manager.conf。里面有:
start on (local-filesystems
      and started dbus
      and static-network-up)
就是说NM要在local-filesystem, dbusstatic-network-up之后才会启动,而这个Upstart Event(事件)应该是要在interfaces中的网络接口启用之后才会发生(Emit)。所以如果interfaces文件失效,NW也起不来。

那么开机等待的两分钟在哪里配置的呢?看了这个文章后才知道,是在/etc/init/failsafe.conf里面配置的。具体看该文件可以知道个大概。

2012年7月14日星期六

Ibus的启动和退出

在Macbook Pro上新装了Ubuntu 12.04 LTS,但是进入桌面后ibus不会自动起来,就在GNOME的Startup Applications里面添加了ibus-dameon命令的启动。

如果重启Lightdm后,ibus的Language Panel出不来。发现是原来的ibus-daemon进程还在导致的。解决办法是在/etc/lightdm/lightdm.conf中加入
session-cleanup-script=/home/tux/bin/cleanloggingout
这里指定了Lightdm退出时执行的脚本cleanloggingout,内容为:
for pid in $(pgrep ^ibus); do
   kill $pid;
done
就是在退出时,杀掉所有ibus相关的进程就好了。这样不管怎么重启Lightdm,进入桌面后ibus都是正常的。

另外,Lightdm更多的配置选项可以在 /usr/share/doc/lightdm/lightdm.conf.gz看到。

2012年7月13日星期五

Ubuntu遇上Mac

现在工作用电脑选的是Macbook Pro,具体型号是15寸8,2。用了这么多年Linux桌面习惯了,而且在我看来Linux桌面的不少体验要好于Mac,这里不细表了。我装了个Ubuntu用。

参考了Ubuntu详细的帮助文档,折腾了几次,终于装上去了。传言要同时插入启动光盘和U盘才可以的,我最后成功也是这样的,但没有再试验其它方法。

即使默认安装缺少的驱动,装起来也很方便。键盘上的多功能键、触摸板的多点触控都支持,这一点比较出乎意外。外接27寸的显示器也可以搞定,只是如果拔下显示器再插上的话,需要登出一下才能让双显生效。另外,电源管理也不行,有时候闲置状态风扇也会转。Macfanctl比较好玩。

我还是喜欢Ubuntu桌面胜过Mac。

2011年11月28日星期一

怒斥Ubuntu

先讲个故事。你闻到家里很臭,但是不知道臭味从哪里来的。最后发现是家里的保姆偷偷在墙角拉屎了。原来这位保姆有随地大小便的习惯。甚至在小区里面也喜欢随地大小便,不过小区被物业和所有业主盯着,所以保姆很少在小区干,而且拉完后自己会立刻清理掉。恶心吧?

其实这个保姆就是Ubuntu。

今天想在软件中心找个软件,考虑到英文界面下看到的评分和评论会比较多,就想把语言从中文切换回英文。可是在设置的语言支持里面改了之后,部分locale是en了,但有几个还是zh,设置语言的图标名称还是“语言支持”中文的,而不是Language Support。

试着修改/etc/default/locale,把~/.config移除,用了locale-gen --purge把其它locale都删除,还有localepurge软件,都无效。只好又在/etc下用grep -R zh_CN *来搜索了,发现/etc/environment文件里面赫然写着中文locale的环境变量:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANGUAGE="zh_CN:en"
LANG="en_US.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
我把里面几个locale的环境变量都删除,还重启了电脑,仍然无效,上面几个locale设置还是有效。真是气愤这破玩意!

我又在家目录下用grep -R zh_CN `ls -A | grep '^\.'`搜索,愤然发现.profile的最后几行:
export LANG="en_US.UTF-8"
export LANGUAGE="zh_CN:en"
export LC_MESSAGES="zh_CN.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export LC_COLLATE="zh_CN.UTF-8"
这几行删除掉后终于干净了。你妈的,都污染到.profile文件了。好吧,拉就拉吧,谁让你住我家呢,可是你他妈的能不能拉完了清理一下啊,害老子浪费一上午时间!我已经默念无数遍Fuck Ubuntu了。

/etc下面的配置文件,系统在软件安装、删除、升级的时候一般都会考虑到配置。而家目录下的设置,软件往往只管写,软件删除了这些配置也保留,当然这是对的,这是用户数据要一直留着;软件升级了也不会对应升级,如果配置文件不兼容了那就会出问题。

Ubuntu把设置直接写到.profile这么关键的文件中,而且又是locale这种重要的系统变量,如果只管写而不考虑后面的清理工作,那就太不负责了。不知道这是哪个白痴开发者干的。甚至/etc/environment都有疑问,我把中文的各种locale都删除了,这个文件里面却还留着中文的locale,需要自己去修改。

2011-11-29更新:发现~/.dmrc也被污染了,还保留着中文语言的信息。删掉还不行,要把中文的改成英文的才可以保留下来。

2011年11月19日星期六

坑爹的Ubuntu

最近被Ubuntu的几个地方坑了,上来抱怨一下。

用interfaces文件配置网络接口的话,开机启动要等2分钟才能进去,显示"Waiting for network configuration...",过1分钟再显示"Waiting up to 60 more seconds for network configuration..."。这是一个影响很多人的bug,而开发者竟然说这是他们设计的特性。最后我只能是用NetworkManager来启用我的无线和有线网卡。

然后帮一个朋友恢复重装Windows之后损坏的GRUB。我很久不干这个了,因为早就不这样双系统安装了。要制作一个USB启动盘。可是dd if=file.iso of=/dev/sdX做出的启动优盘不能启动,而usb-creator-gtk选了ISO文件和优盘后,创建的按钮还是灰色的。后来从官方文档了解到,制作这个优盘启动盘需要:
  • 优盘要分区
  • 第一个分区(启动分区)要格式化成FAT16或者FAT32文件系统
  • 这个分区要加载上
真是坑爹啊,学到的标准的方法在Ubuntu这里是不适用的。

做好优盘系统进去后,按照官方文档修复GRUB。推荐的Boot-Repair根本找不到GRUB的安装。又用命令行修复,可是重启后只能进入GRUB的rescue模式,而且不能加载normal模块,说文件找不到。

后来找到原因了。正常的Linux,root文件系统进去就是标准的目录,bin、usr什么的。这个朋友用了btrfs文件系统,root文件系统进去有个@目录,@目录下才是bin、usr什么的。GRUB在(hdX,Y)找不到root,在(hdX,Y)/@才能找到root,所以Boot-Repair找不到GRUB,rescue模式下也找不到模块文件。另外,官方文档说的是(hdX,Y),而我在GRUB的rescue模式下,用ls分区发现根分区是(hdX,msdosY)这样的,所以要(hdX,msdosY)/@这样指定根分区才能找到root。

修复了GRUB后搜索,发现这是11.04及其后对btrfs文件系统特有的设计。又是Ubuntu一大奇葩的特色,打破常规,让你学到的东西在Ubuntu里面再次失效。

2011年4月30日星期六

系统升级后对用户配置文件的处理

升级到Ubuntu 11.04后,Ubuntu Classic的桌面特效出问题了。在Launchpad上找了一圈,也没有看到有人汇报切合我问题的Bug,所以估计是特例,自己提交上去也得不到共鸣和解决。再次研究,终于搞定了。

我研究了家目录下的一些目录,比如.gnome2,删除掉compiz相关的目录。然后全面搜查一遍(要在家目录下):
tux@dell:~$ find . -iregex "\./\..*compiz.*"
在.gconf/apps里面还有东西。把找到的文件都删除掉,注销再登入就好了。如果还不行,可以grep -R *试试吧。

其实很多时候软件升级带来的Bug并不是软件本身的Bug,而是因为用户家目录下的配置文件造成的。也许是新的软件和老的配置文件不兼容,所以软件就会出毛病。如果配置文件不是特别重要,可以把所有在家目录下相关的配置都删除掉(做必要的备份),很可能就可以解决问题了。

我们不能指望发行版在升级软件的时候,还考虑到用户配置文件的迁移和升级,发行版只能考虑到系统配置文件的升级。我之前一直特别自豪于Linux下的配置文件可以用好几年。即使要重装系统,因为家目录总是单独分区的,所以用户配置还可以在新系统下接着使用。现在看来,系统升级后如果出现Bug,用户有必要对家目录下以点 (.)开头的配置文件进行必要的核查,并采取必要的措施。

2011年4月25日星期一

Ubuntu 11.04和GNOME3

一时无聊升级了到了Ubuntu 11.04(离正式发布还有几天),结果桌面特效不能用,而且不论是Unity还是Ubuntu Classic,对我双显示器的支持都有问题。好吧,那就试试GNOME3。又升级到了GNOME3,对双显示器的支持都很糟糕,而且界面很不习惯。我已经把GNOME 2调教得非常顺手和方便了,鼠标到桌面左下角显示桌面,桌面右下角显示窗口缩略图(Exposé),窗口直接在两个工作空间(Workspace)之间拖动。没有桌面特效这两个功能都没有了。

于是就把GNOME3降级到了GNOME2。把源改回10.10的,然后一个一个包地降级,竟然成功了。11.04的桌面特效也没有,就试着把11.04的桌面降级到10.10。折腾很久,无奈还是无法手动解决apt的dependency hell,就改回11.04的源,恢复到了11.04。没有桌面特效,很不爽!不折腾了,开始做事情。

2011年3月4日星期五

Unattended Upgrades

Ubuntu下的unattended-upgrades包可以自动安装安全更新。apt包提供的/etc/cron.daily/apt文件可以识别unattended-upgrades的设置,该设置在/etc/apt/apt.conf.d/10periodic中定义。默认是不启用的,要添加
APT::Periodic::Unattended-Upgrade "1";
到10periodic中方可。
在GNOME菜单的“软件源”中,若勾上“不确认就安装安全更新”,则立刻在10periodic文件中添加该行。

多说一句的是,10periodic文件是由update-notifier-common包提供的:
# apt-file search 10periodic
update-notifier-common: /etc/apt/apt.conf.d/10periodic

2011年1月12日星期三

Debian菜单

Ubuntu下的Debian菜单里面有时候会有无效的项目,它们在~/.local/share/applications/menu-xdg下面。在这个目录里面rm -rf *看起来没什么伤害,Debian菜单里面的项是用menu包的update-menus命令生成的。

2011年1月9日星期日

Ubuntu版本生命周期图

一直想画一个甘特图一样的Ubuntu版本生命周期图,这样就可以直观地看到当前哪些版本还是官方支持的,以选择使用的版本,或者升级过期的系统。

每次遇到画图,就不知道选啥工具。这次用Ipe画了画,要精确到月的话太费劲了,精确到天就更不能想象了。后来决定用甘特图工具画好了,这样可以自动地处理日期,生成生命周期图。其实我想到用PSTricks肯定可以画得既漂亮又精确,但是这个是Tex的,太花时间了,还是作罢。最后在Google Docs里面找了个甘特图模板画的。
下面是嵌入的甘特图,RSS订阅的可能看不到,要进入文章原始页面查看。

电子表格文件的Google Docs链接

2011年1月2日星期日

优盘上的Ubuntu

用Ubuntu自带的usb-creator-gtk可以非常方便地在优盘上创建一个系统,用作安装盘或者应急系统使用。用这个优盘从别的电脑里面拷了点东西,然后在自己的Ubuntu桌面上打开这个优盘,系统的主要内容是在casper/filesystem.squashfs这样一个600多MB的大文件里面(Live CD里面也是一样的内容),这是一个squashfs格式的文件。把文件挂载上去,得到一个Linux系统的根目录,但是home里面是空的,没法找到我拷贝进去的文件。必须从这个优盘启动系统,才能看到拷进去的文件。

2010年12月31日星期五

中文输入法

为了进入GNOME自动启动中文输入法,我都是在~/.gnomerc里面添加类似如下的内容:
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
export QT4_IM_MODULE=ibus
ibus-daemon &
如果是fcitx或者SCIM,就相应做修改。
今天发现去掉这些内容,ibus也是能启动的,只要在主菜单的System->Administration->Language Support里面把Keyboard input method system设置为ibus即可。

2010年11月13日星期六

dmidecode

dmidecode这个命令可以显示硬件的一些信息,这个命令就在dmidecode这个包里面。DMI是Desktop Management Interface的缩写。

2010年11月7日星期日

APT

在服务器上安装update-notifier-common,可以在console下登录后显示可用更新,因为该包安装了/etc/update-motd.d/90-updates-available,可以动态更新MOTD(Message
Of The Day)。但是后台的更新并不是由该包实现,而是由apt包实现,该包安装了/etc/cron.daily/apt,用于检查更新。此外,unattended-upgrades是为了实现自动、无人干预下的安全更新安装。

貌似现在apt相关的软件挺多,关联也比较复杂,但是只要软件提供了清晰的文档,耐心阅读文档,就可以搞清楚都是干什么的。

2010年10月3日星期日

从未完成的翻译

给爸爸的电脑装了Ubuntu 10.10 beta,除gnome-games外,还安装了kdegames。kdegames默认是英文界面的,需要汉化。为此安装了KDE的systemsettings以及language-selector-qt来把kdegames的界面改为中文。为了能够看帮助,又安装了khelpcenter4,但是kdegames的帮助仍然是英文的,并没有翻译过来。

kbounce为例,帮助文件位于/usr/share/doc/kde/HTML/en/kbounce/index.docbook。在Launchpad上kbounce的翻译页面,显示的翻译进度是100%。在上面列出的翻译项中,只有软件界面的文字,并不包括帮助文件的内容。

再以GNOME下的俄罗斯方块游戏quadrapassel为例,帮助文件的中文翻译位于/usr/share/gnome/help/quadrapassel/zh_CN/quadrapassel.xml。这样游戏的界面是中文,帮助文件也进行了翻译,但只是部分的。这好歹要比kbounce要强,至少还翻译过。在Launchpad上gnome-games的翻译页面,显示的翻译进度也是100%。这仍然也只算界面,不算帮助文件。在里面搜索quadrapassel,只有4条结果,更可证明帮助文件是不算在翻译任务里面的。

看来Launchpad上面的翻译进度都是虚高,看起来是100%,其实远远没有达到完整的本地化。这也难怪你装了中文的Ubuntu,安装和使用中还要面对很多的英文。对于不懂英文的人,可以说就是半成品。

并不是说半成品不可以。维基百科的每一个语言项目可以说都是半成品,因为从来不会所有的条目都处于“完成”的状态。这就是集市模式的特色。但是Launchpad上面虚高的统计数据让人把半成品误解为成品,这样的结果是有害自由软件的发展的。

2010年6月30日星期三

网络启动脚本

在前一篇日记中,我写到“目前我发现禁用interfaces里面设置的方法只有把这个文件改名或者挪走”。我想找一个更干净的方法。我以为/etc/init.d/networking是启用网络接口的脚本,就用update-rc.d把这个脚本在/etc/rc?.d/里面的链接删掉,这样networking脚本就不会启动了。谁知下次开机后,网卡依然是按照interfaces里面的设置启用的。

我读了一下这个脚本(Ubuntu 10.04)。首先它默认是在0、6和S的运行级启动的,分别对应关机、重启和单用户模式。其次,脚本的start参数对应的命令只有如下一段:
case "$1" in
start)
/lib/init/upstart-job networking start
;;
看了一下upstart-job这个脚本,由于对Bash脚本不熟,没有仔细研读,待日后再研究。难道networking这个脚本只是用来停止网络接口的?这是瞎猜,不是结论。

2010年6月3日星期四

升级频繁了也麻烦

Ubuntu里面每次更新了内核就很麻烦,VirtualBox和ATI的显卡驱动保证失效,这样3D程序也都不能用了。原因是它们都是依赖确定版本的内核编译内核模块的,必须再重新安装一遍才行。为了避免这样的麻烦,我已经只启用lucid和lucid-security的源,把lucid-updates也删除了,而且在Aptitude里面把linux这个包hold了,确保以后不更新内核。