2009年1月29日星期四

如何让root权限下的程序拥有普通权限的gnome主题

linux由于用户权限有限(安全考虑),所以用gnome的主题安装后,会发现在root权限下特别难看。原因是,安装的主题文件被放在/home/username/.theme文件夹下root用户程序显示时不会使用这个,就会用原生主题(很丑)。

解决方法:
sudo ln -s ~/.themes /root

sudo ln -s ~/.icons /root
这样建立硬连接接可以了

www.gnome-look.org无法登陆

一个艺术性质的提供gnome主题的网站也上不去。。。

2009年1月25日星期日

[新年愿望]许几个新年愿望(2009)

今年内的愿望
1.参加类似于KDE/GNOME的社区
2.在毕设获得良以上成绩
3.做出个真正实用的开源程序(非Java)
4.真正了解linux后开始创造自己的发行版
5.见到真人的声优
6.找到份好工作

2009年1月24日星期六

udev详解

如 果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集 的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但是devfs有一些严重的限制,从 2.6.13版本后移走了。目前取代他的便是文本要提到的udev--一个用户空间程序。

目前很多的Linux分发版本采纳了udev的方式,因为它在Linux设备访问,特别是那些对设备有极端需求的站点(比如需要控制上千个硬盘)和热插拔设备(比如USB摄像头和MP3播放器)上解决了几个问题。下面我我们来看看如何管理udev设备。

实 际上,对于那些为磁盘,终端设备等准备的标准配置文件而言,你不需要修改什么。但是,你需要了解udev配置来使用新的或者外来设备,如果不修改配置,这 些设备可能无法访问,或者说Linux可能会采用不恰当的名字,属组或权限来创建这些设备文件。你可能也想知道如何修改RS-232串口,音频设备等文件 的属组或者权限。这点在实际的Linux实施中是会遇到的。


为什么使用udev

在此之前的设备文件管理方法(静态文件和devfs)有几个缺点:

* 不确定的设备映射。特别是那些动态设备,比如USB设备,设备文件到实际设备的映射并不可靠和确定。举一个例子:如果你有两个USB打印机。一个可能称为 /dev/usb/lp0,另外一个便是/dev/usb/lp1。但是到底哪个是哪个并不清楚,lp0,lp1和实际的设备没有一一对应的关系,因为他 可能因为发现设备的顺序,打印机本身关闭等原因而导致这种映射并不确定。理想的方式应该是:两个打印机应该采用基于他们的序列号或者其他标识信息的唯一设 备文件来映射。但是静态文件和devfs都无法做到这点。

*没有足够的主/辅设备号。我们知道,每一个设备文件是有两个8位的数字:一个是主设备号 ,另外一个是辅设备号来分配的。这两个8位的数字加上设备类型(块设备或者字符设备)来唯一标识一个设备。不幸的是,关联这些身边的的数字并不足够。

*/dev目录下文件太多。一个系统采用静态设备文件关联的方式,那么这个目录下的文件必然是足够多。而同时你又不知道在你的系统上到底有那些设备文件是激活的。

*命名不够灵活。尽管devfs解决了以前的一些问题,但是它自身又带来了一些问题。其中一个就是命名不够灵活;你别想非常简单的就能修改设备文件的名字。缺省的devfs命令机制本身也很奇怪,他需要修改大量的配置文件和程序。;

*内核内存使用,devfs特有的另外一个问题是,作为内核驱动模块,devfs需要消耗大量的内存,特别当系统上有大量的设备时(比如上面我们提到的系统一个上有好几千磁盘时)

udev的目标是想解决上面提到的这些问题,他通采用用户空间(user-space)工具来管理/dev/目录树,他和文件系统分开。知道如何改变缺省配置能让你之大如何定制自己的系统,比如创建设备字符连接,改变设备文件属组,权限等。

udev配置文件

主要的udev配置文件是/etc/udev/udev.conf。这个文件通常很短,他可能只是包含几行#开头的注释,然后有几行选项:

udev_root="/dev/"

udev_rules="/etc/udev/rules.d/"

udev_log="err"

上面的第二行非常重要,因为他表示udev规则存储的目录,这个目录存储的是以.rules结束的文件。每一个文件处理一系列规则来帮助udev分配名字给设备文件以保证能被内核识别。
你 的/etc/udev/rules.d下面可能有好几个udev规则文件,这些文件一部分是udev包安装的,另外一部分则是可能是别的硬件或者软件包生 成的。比如在Fedora Core 5系统上,sane-backends包就会安装60-libsane.rules文件,另外initscripts包会安装60-net.rules文 件。这些规则文件的文件名通常是两个数字开头,它表示系统应用该规则的顺序。

规则文件里的规则有一系列的键/值对组成,键/值对之间用逗 号(,)分割。每一个键或者是用户匹配键,或者是一个赋值键。匹配键确定规则是否被应用,而赋值键表示分配某值给该键。这些值将影响udev创建的设备文 件。赋值键可以处理一个多值列表。匹配键和赋值键操作符解释见下表:


udev 键/值对操作符
操作符 匹配或赋值t 解释
----------------------------------------
== 匹配 相等比较
!= 匹配 不等比较
= 赋值 分配一个特定的值给该键,他可以覆盖之前的赋值。
+= 赋值 追加特定的值给已经存在的键
:= 赋值 分配一个特定的值给该键,后面的规则不可能覆盖它。


这有点类似我们常见的编程语言,比如C语言。只是这里的键一次可以处理多个值。有一些键在udev规则文件里经常出现,这些键的值可以使用通配符(*,?,甚至范围,比如[0-9]),这些常用键列举如下:


常用udev键
键 含义
ACTION 一个时间活动的名字,比如add,当设备增加的时候
KERNEL 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备
DEVPATH 内核设备录进,比如/devices/*
SUBSYSTEM 子系统名字,比如sound,net
BUS 总线的名字,比如IDE,USB
DRIVER 设备驱动的名字,比如ide-cdrom
ID 独立于内核名字的设备名字
SYSFS{ value} sysfs属性值,他可以表示任意
ENV{ key} 环境变量,可以表示任意
PROGRAM 可执行的外部程序,如果程序返回0值,该键则认为为真(true)
RESULT 上一个PROGRAM调用返回的标准输出。
NAME 根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。
如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。
SYMLINK 根据规则创建的字符连接名
OWNER 设备文件的属组
GROUP 设备文件所在的组。
MODE 设备文件的权限,采用8进制
RUN 为设备而执行的程序列表
LABEL 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务)
GOTO 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO
IMPORT{ type} 导入一个文件或者一个程序执行后而生成的规则集到当前文件
WAIT_FOR_SYSFS 等待一个特定的设备文件的创建。主要是用作时序和依赖问题。
PTIONS 特定的选项: last_rule 对这类设备终端规则执行; ignore_device 忽略当前规则; ignore_remove 忽略接下来的并移走请求。
all_partitions 为所有的磁盘分区创建设备文件。


我们给出一个列子来解释如何使用这些键。下面的例子来自Fedora Core 5系统的标准配置文件。

KERNEL=="*", OWNER="root" GROUP="root", MODE="0600"
KERNEL=="tty", NAME="%k", GROUP="tty", MODE="0666", OPTIONS="last_rule"
KERNEL=="scd[0-9]*", SYMLINK+="cdrom cdrom-%k"
KERNEL=="hd[a-z]", BUS=="ide", SYSFS{removable}=="1", SYSFS{device/media}=="cdrom", SYMLINK+="cdrom cdrom-%k"
ACTION=="add", SUBSYSTEM=="scsi_device", RUN+="/sbin/modprobe sg"

上面的例子给出了5个规则,每一个都是KERNEL或者ACTION键开头:

*第一个规则是缺省的,他匹配任意被内核识别到的设备,然后设定这些设备的属组是root,组是root,访问权限模式是0600(-rw-------)。这也是一个安全的缺省设置保证所有的设备在默认情况下只有root可以读写。
*第二个规则也是比较典型的规则了。它匹配终端设备(tty),然后设置新的权限为0600,所在的组是tty。它也设置了一个特别的设备文件名:%K。在这里例子里,%k代表设备的内核名字。那也就意味着内核识别出这些设备是什么名字,就创建什么样的设备文件名。

*第三行开始的KERNEL=="scd[0-9]*",表示 SCSI CD-ROM 驱动. 它创建一对设备符号连接:cdrom和cdrom-%k。

*第四行,开始的 KERNEL=="hd[a-z]", 表示ATA CDROM驱动器。这个规则创建和上面的规则相同的符号连接。ATA CDROM驱动器需要sysfs值以来区别别的ATA设备,因为SCSI CDROM可以被内核唯一识别。.

*第五行以 ACTION=="add"开始,它告诉udev增加 /sbin/modprobe sg 到命令列表,当任意SCSI设备增加到系统后,这些命令将执行。其效果就是计算机应该会增加sg内核模块来侦测新的SCSI设备。

当然,上面仅仅是一小部分例子,如果你的系统采用了udev方式,那你应该可以看到更多的规则。如果你想修改设备的权限或者创建信的符号连接,那么你需要熟读这些规则,特别是要仔细注意你修改的那些与之相关的设备。

修改你的udev配置

在修改udev配置之前,我们一定要仔细,通常的考虑是:你最好不要修改系统预置的那些规则,特别不要指定影响非常广泛的配置,比如上面例子中的第一行。不正确的配置可能会导致严重的系统问题或者系统根本就无法这个正确的访问设备。

而 我们正确的做法应该是在/etc/udev/rules.d/下创建一个信的规则文件。确定你给出的文件的后缀是rules文件名给出的数字序列应该比标 准配置文件高。比如,你可以创建一个名为99-my-udev.rules的规则文件。在你的规则文件中,你可以指定任何你想修改的配置,比如,假设你修 改修改floppy设备的所在组,还准备创建一个信的符号连接/dev/floppy,那你可以这么写:
KERNEL=="fd[0-9]*", GROUP="users", SYMLINK+="floppy"


有些发行版本,比如Fedora,采用了外部脚本来修改某些特定设备的属组,组关系和权限。因此上面的改动可能并不见得生效。如果你遇到了这个问题,你就需要跟踪和修改这个脚本来达到你的目的。或者你可以修改PROGRAM或RUN键的值来做到这点。

某些规则的修改可能需要更深的挖掘。比如,你可能想在一个设备上使用sysfs信息来唯一标识一个设备。这些信息最好通过udevinfo命令来获取。
$ udevinfo –a –p $(udevinfo –q path –n /dev/hda)

上 面的命令两次使用udevinfo:一次是返回sysfs设备路径(他通常和我们看到的Linux设备文件名所在路径--/dev/hda--不同);第 二次才是查询这个设备路径,结果将是非常常的syfs信息汇总。你可以找到最够的信息来唯一标志你的设备,你可以采用适当的替换udev配置文件中的 SYSFS选项。下面的结果就是上面的命令输出

[root@localhost rules.d]# udevinfo -a -p $(udevinfo -q path -n /dev/hda1)

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/block/hda/hda1':
KERNEL=="hda1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{stat}==" 1133 2268 2 4"
ATTR{size}=="208782"
ATTR{start}=="63"
ATTR{dev}=="3:1"

looking at parent device '/block/hda':
KERNELS=="hda"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{stat}==" 28905 18814 1234781 302540 34087 133247 849708 981336 0 218340 1283968"
ATTRS{size}=="117210240"
ATTRS{removable}=="0"
ATTRS{range}=="64"
ATTRS{dev}=="3:0"

looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0/0.0':
KERNELS=="0.0"
SUBSYSTEMS=="ide"
DRIVERS=="ide-disk"
ATTRS{modalias}=="ide:m-disk"
ATTRS{drivename}=="hda"
ATTRS{media}=="disk"

looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0':
KERNELS=="ide0"
SUBSYSTEMS==""
DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:1f.1':
KERNELS=="0000:00:1f.1"
SUBSYSTEMS=="pci"
DRIVERS=="PIIX_IDE"
ATTRS{broken_parity_status}=="0"
ATTRS{enable}=="1"
ATTRS{modalias}=="pci:v00008086d000024CAsv0000144Dsd0000C009bc01sc01i8a"
ATTRS{local_cpus}=="1"
ATTRS{irq}=="11"
ATTRS{class}=="0x01018a"
ATTRS{subsystem_device}=="0xc009"
ATTRS{subsystem_vendor}=="0x144d"
ATTRS{device}=="0x24ca"
ATTRS{vendor}=="0x8086"

looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""


举 一个例子:假设你想修改USB扫描仪的配置。通过一系列的尝试,你已经为这个扫描仪标识了Linux设备文件(每次打开扫描仪时,名字都会变)。你可以使 用上面的命令替换这个正确的Linux设备文件名,然后定位输出的采用SYSFS{idVendor}行和SYSFS{idProduct}行。最后你可 以使用这些信息来为这个扫描仪创建新的选项。


SYSFS{idVendor}=="0686", \

SYSFS{idProduct}=="400e", \

SYMLINK+="scanner", MODE="0664", \

group="scanner"

上面的例子表示将扫描仪的组设置为scanner,访问权限设置为0664,同时创建一个/dev/scanner的符号连接。



---------------------------------------------------------------------------------
理解和认识udev

因 为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增 加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。
过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件都是linux内核自动分配的。很难固定下来,除非你更改加载SCSI卡驱动程序的顺 序,让内置硬盘连接的SCSI卡比外接磁盘阵列连接的SCSI卡的驱动模块先加载到内核,这样就能保证/dev/sda总是指向内置的硬盘。但这种解决方 法毕竟不太完美,而且对于其他的即插即用设备,如USB设备等都不适用。
近来,通过安装和升级linux-2.6内核,发现这个问题已经可以通过2.6内核新的sysfs文件系统和udev程序得到解决。下面就是我在学习了udev配置后的一点心得。我喜欢用FAQ的形式来说明。

问:什么是udev?
答:udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。

问:udev支持什么内核?
答:udev只支持linux-2.6内核,因为udev严重依赖于sysfs文件系统提供的信息,而sysfs文件系统只在linux-2.6内核中才有。

问:udev是一个内核程序还是用户程序?
答:udev是一个用户程序(user-mode daemon)。

问:udev和devfs有什么差别?
答:udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中。据称:devfs具有一些不太容易解决的先天缺陷。

问:udev的配置文件放在哪里?
答:udev是一个用户模式程序。它的配置文件是/etc/udev/udev.conf。这个文件一般缺省有这样几项:
udev_root="/dev" ; udev产生的设备文件的根目录是/dev
udev_db="/dev/.udevdb" ; 通过udev产生的设备文件形成的数据库
udev_rules="/etc/udev/rules.d" ;用于指导udev工作的规则所在目录。
udev_log="err" ;当出现错误时,用syslog记录错误信息。

问:udev的工作过程是怎样的?
答:由于没有研究过udev的源程序,不敢贸然就说udev的工作过程。我只是通过一些网上的资料和udev的说明文档,大致猜测它的工作过程可能是这样的。

1. 当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成一项新的记录,一般sysfs文件系统会被 mount到 /sys目录中。新记录是以一个或多个文件或目录的方式来表示。每个文件都包含有特定的信息。(信息是如何表述的,还要另外研究?)
2. udev在系统中是以守护进程的方式udevd在运行,它通过某种途径(到底什么途径,目前还没搞懂。)检测到新设备的出现,通过查找设备对应的sysfs中的记录得到设备的一些信息。
3. udev 会根据/etc/udev/udev.conf文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设 备应该施行什么措施的规则文件。udev读取文件是按照文件名的ASCII字母顺序来读取的,如果udev一旦找到了与新加入的设备匹配的规则,udev 就会根据规则定义的措施对新设备进行配置。同时不再读后续的规则文件。

问:udev的规则文件的语法是怎样的?
答:udev的规 则文件以行为单位,以"#"开头的行代表注释行。其余的每一行代表一个规则。每个规则分成一个或多个“匹配”和“赋值”部分。“匹配”部分用“匹配“专用 的关键字来表示,相应的“赋值”部分用“赋值”专用的关键字来表示。“匹配”关键字包括:ACTION,KERNEL,BUS, SYSFS等等,“赋值”关键字包括:NAME,SYMLINK,OWNER等等。具体详细的描述可以阅读udev的man文档。

下面举个例子来说明一下,有这样一条规则:
SUBSYSTEM=="net", ACTION=="add", SYSFS{address}=="00:0d:87:f6:59:f3", IMPORT="/sbin/rename_netiface %k eth0"
这个规则中的“匹配”部分有三项,分别是SUBSYSTEM,ACTION和SYSFS。而"赋值"部分有一项,是IMPORT。这个规则就是说,当系统 中出现的新硬件属于net子系统范畴,系统对该硬件采取的动作是加入这个硬件,且这个硬件在SYSFS文件系统中的“address”信息等于“00: 0d..."时,对这个硬件在udev层次施行的动作是调用外部程序/sbin/rename_netiface,传递的参数有两个,一个是“%k”,代 表内核对该新设备定义的名称。另一个是”eth0“。
从上面这个例子中可以看出,udev的规则的写法比较灵活的,尤其在“匹配”部分中,可以通过诸如”*“, ”?“,[a-c],[1-9]等shell通配符来灵活匹配多个匹配项。具体的语法可以参考udev的man文档。

问:udev怎样做到不管设备连接的顺序而维持一个统一的设备名?
答: 实际上,udev是通过对内核产生的设备名增加别名的方式来达到上述目的的。前面说过,udev是用户模式程序,不会更改内核的行为。因此,内核依然会我 行我素地产生设备名如sda,sdb等。但是,udev可以根据设备的其他信息如总线(bus),生产商(vendor)等不同来区分不同的设备,并产生 设备文件。udev只要为这个设备文件取一个固定的文件名就可以解决这个问题。在后续对设备的操作中,只要引用新的设备名就可以了。但为了保证最大限度的 兼容,一般来说,新设备名总是作为一个对内核自动产生的设备名的符号链接(link)来使用的。

例如:内核产生了sda设备名,而根据信息,这个设备对应于是我的内置硬盘,那我就可以制定udev规则,让udev除了产生/dev/sda设备文件 外,另外创建一个符号链接叫/dev/internalHD。这样,我在fstab文件中,就可以用/dev/internalHD来代替原来的 /dev/sda了。下次,由于某些原因,这个硬盘在内核中变成了sdb设备名了,那也不用着急,udev还会自动产生/dev/internalHD这 个链接,并指向正确的/dev/sdb设备。所有其他的文件像fstab等都不用修改。

问:怎样才能找到这些设备信息,并把他们放到udev的规则文件中来匹配呢?
答:这个问题比较难,网上资料不多,我只找到一篇文章来介绍如何写udev的规则。他的基本方法是通过udevinfo这个实用程序来找到那些可以作为规则文件里的匹配项的项目。有这样两种情况可以使用这个工具:
第一种情况是,当你把设备插入系统后,系统为设备产生了设备名(如/dev/sda)。那样的话,你先用udevinfo -q path -n /dev/sda,命令会产生一个该设备名对应的在sysfs下的路径,如/block/sda。然后,你再用udevinfo -a -p /sys/block/sda,这个命令会显示一堆信息,信息分成很多块。这些信息实际来自于操作系统维护的sysfs链表,不同的块对应不同的路径。你 就可以用这些信息来作为udev规则文件中的匹配项。但需要注意的是,同一个规则只能使用同一块中显示的信息,不能跨块书写规则。
第二种情况是,不知道系统产生的设备名,那就只有到/sys目录下去逐个目录查找了,反复用udevinfo -a -p /sys/path...这个命令看信息,如果对应的信息是这个设备的,那就恭喜你。否则就再换个目录。当然,在这种情况下,成功的可能性比较小。


----------------------------------------------------------------------------------
Udev (简体中文)
From ArchWiki
Jump to: navigation, search


i18n
English
Русский
繁體中文
简体中文

注意: 如果您是从DevFS升级到Udev, 请查看 DevFS to Udev.

这篇文档将介绍udev的一些新的变化。从084版开始,udev能够代替hotplug和coldplug的所有功能。正因为这样,hotplug包已经从Arch仓库中去掉了。
Contents
[hide]

* 1 重要提示
* 2 基本需求
* 3 最近更新
* 4 模块禁用列表
* 5 load_modules: 有用的启动参数
* 6 已知的硬件问题
* 7 自动加载带来的一些问题
o 7.1 CPUFreq模块
o 7.2 声音问题和一些不能自动加载的模块
o 7.3 多个同类型设备(网卡,声卡)每次启动的都不同
* 8 自己编译内核造成的一些已知问题
o 8.1 Udev无法启动
o 8.2 CD/DVD符号和权限错误
* 9 Udev小窍门
o 9.1 自动加载usb设备

重要提示

... 切记,在使用udev加载任何modules(内核模块)之前(无论是否是启动时自动加载),您必须在/etc/rc.conf将 MOD_AUTOLOAD选项设置为yes ,否则您必须手动加载这些modules。您可以修改rc.conf中的MODULES或者使用modprobe命令来手动加载您所需要的 modules。另一种方法是用hwdetect --modules生成系统硬件的modules列表,然后将这个列表添加到rc.conf中让系统启动时自动加载这些modules。

基本需求

* 内核: 2.6.15或更高版本。
* 您将无法在fstab和bootloader设置中再使用DevFS格式的设备名称! 更多相关内容请查看DevFS to Udev。

最近更新

* startudev程序被取出。如果需要重新加载udev规则请使用 /etc/start_udev。
* Udev代替了hotplug和hwdetect的功能。同时我们保存了hwdetect,并且只在 mkinitrd程序生成initrd的时候用到。
* Udev可以同时加载多个模块,这样可以加快启动速度,然而,这样做的结果是她不能保证每次加载的顺序,所以当你使用多声卡或网卡的时候就会出现问题,这个问题下面将会再讨论。

模块禁用列表

udev也会犯错或加载错误的模块。为了防止错误的发生,你可以使用模块禁用列表 。一旦加入该列表的模块,无论是启动时,或者时运行时(如usb硬盘等)udev都不会加载这些模块。

只需在您在 rc.conf的MODULES中对应模块前加上感叹号(!)就可禁用该模块。

例如,

MODULES=(!moduleA !moduleB)

load_modules: 有用的启动参数

如 果您在内核启动参数中加入load_modules=off,那么udev会停止任何自动加载工作. 如果系统出现问题时,这个功能会十分有用。如果udev加载了有问题的模块导致系统挂起或者其它严重的问题时,你可以使用这个参数来禁用自动加载,以此来 防止加载有问题的模块。

已知的硬件问题

- BusLogic设备被损坏而且导致启动时死机。

这是一个内核的Bug目前还没有修正。

- PCMCIA读卡器被认为是可移除设备.

把它们加入到/etc/pmount.allow中,使用hal的pmount来读取

自动加载带来的一些问题

CPUFreq模块

我门还没有找到一个很好的方法加载不同的CPUFreq控制器,所以我们把从自动加载进程里把它去掉了。如果您需要测量CPU频率,你必须在rc.conf的MODULES队列中显式的加入合适的模块。

声音问题和一些不能自动加载的模块

一些用户跟踪发现问题出在/etc/modprobe.conf中一些旧的部分,试着去掉这些旧的部分再试试看。
多个同类型设备(网卡,声卡)每次启动的都不同

因为udev同时加载所有模块,所以一些设备可能初始化顺序不同。例如同时有两个网卡时,它们总是在eth0和eth1之间变来变去。

常用的解决办法是在您的rc.conf文件中通过修改MODULES队列来指明顺序。这个队列里的模块将在udev自动加载之前由系统加载,因此您可以控制模块在启动时加载顺序。

# 在e100之前加载8139too
MODULES=(8139too e100)

另一个解决网卡的方法是使用udev-sanctified方法为每个网卡静态命名。创建文件/etc/udev/rules.d/10-network.rules然后将不同的网卡通过MAC地址绑定到不同的名字上:

SUBSYSTEM=="net", SYSFS{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
SUBSYSTEM=="net", SYSFS{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"

同时,您需要注意以下内容:

* 您可以通过下面的命令获得网卡的MAC地址:: udevinfo -a -p /sys/class/net/<你的网卡>
* 注意在udev规则文件中使用小写的16进制MAC地址,因为udev无法识别大写的MAC地址。
* 一些用户在使用旧的命名方式时出现问题,例如: eth0, eth1, 等等. 如果出现这个问题,试试使用 "lan"或者"wlan"之类的名字.

注意不要忘记修改您的/dec/rc.conf和其它使用ethX命名的配置文件。

自己编译内核造成的一些已知问题

Udev无法启动

请确定您的内核版本大于或等于2.6.15。较早的内核没有udev自动装载所需要的uevent功能。

CD/DVD符号和权限错误

如果您使用2.6.15的内核的话,您需要安装ABS的uevent补丁(它从2.6.16内核中抽取了一些uevent功能)。您可以使用abs命令来同步ABS树,然后您就可以在/var/abs/kernels/kernel26/下找到abs补丁。

Udev小窍门

自动加载usb设备

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usb%m", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usb%n", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /mnt/usb%n"
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /mnt/usb%n", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/usb%n", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /mnt/usb%n"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /mnt/usb%n", OPTIONS="last_rule"

把这些udev规则放到/etc/udev/rules.d/下任何一个文件名以.rules结尾的文件中,例如/etc/udev/rules.d/sda.rules。

如果想同时建立/media到/mnt符号连接,可以使用下面的版本:

KERNEL=="sd[a-z]", NAME="%k", SYMLINK+="usbhd-%k", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", SYMLINK+="usbhd-%k", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/ln -s /media/usbhd-%k /mnt/usbhd-%k"
ACTION=="add", KERNEL=="sd[a-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,sync,dirsync,noexec,nodev,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[a-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rm -f /mnt/usbhd-%k"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k"
ACTION=="remove", KERNEL=="sd[a-z][0-9]", RUN+="/bin/rmdir /media/usbhd-%k", OPTIONS="last_rule"

注 意!如果你是用的其它的固定设备(例如SATA的硬盘,您可以从/etc/fstab中查看)被识别为/dev/sdX,您必须从sd[a-z] 中去掉你的那个sdX。例如,如果您的SATA硬盘被是识别为/dev/sda,您就需要把所有的“sd[a-z]”替换成“sd[b-z]”。在规则文 件的文件名前加上数字(如:010.udev.rules)是个很好的主意,这样udev在读取标准规则前,将会读取这个规则文件。这些规则设置后不需要 修改/etc/fstab文件。请查看mount命令的参数来修改权限等特性(您可以从论坛搜索查看mount命令的参数,然后根据您的需要修改它们)。

原文地址 http://blog.csdn.net/xianfengdesign/archive/2007/10/16/1827892.aspx

2009年1月20日星期二

日动画公司积极加大对华合作力度

据《日本经济新闻》报道,日本动画公司看好日益增长的中国市场,加大对 华合作力度。其中,动画制作巨头GDH公司(即GONZO的母公司)与台湾的中华电信公司联合在台湾开设专门动画频道,通过互联网播放该公司制作的动画节 目,并配以中文字幕,每两集收费约160日元;东映动画公司将其出资60%的香港销售公司TAE完全收归旗下,拟通过开拓中国市场扭转去年利润下滑的局 面;MADHOUSE剧本公司与中国青青树制作公司合作,共同制作长篇动画在中国剧场上映。日方除提供脚本等技术指导外,还为今后日本动画进入中国市场奠 定基础。

据日本信息媒体白书统计,日本动画市场年营业额长期徘徊在2000亿日元左右。随着电视媒体等播放环境恶化,日本各动画公司积极开拓中国市场扭转局面。

ubuntu8.10/8.04试用Gnome do 0.8alpha版(Donky新界面)

Gnome do 0.8 alpha版拥有了新的donky界面,我试用了之后发现虽然有些缺点,但是新界面很不错。
唯一的缺点是:放大功能开启会很卡。

apt直接安装方法:
源列表添加:
8.10:
deb http://ppa.launchpad.net/do-testers/ppa/ubuntu intrepid main
deb-src http://ppa.launchpad.net/do-testers/ppa/ubuntu intrepid main
8.04:
deb http://ppa.launchpad.net/do-testers/ppa/ubuntu hardy main
deb-src http://ppa.launchpad.net/do-testers/ppa/ubuntu hardy main

然后输入安装:
sudo apt-get install gnome-do gnome-do-plugins

图片:
Docky doing what docky does best.

Right clicking the Do icon on Docky gives you a simple configuration menu

Searching with Docky gives you a simple, at a glace, interface.


2009年1月14日星期三

诺基亚为 Qt 增添 LGPL 授权选择

“诺基亚今天宣布,从预定于 2009 年 3 月发布的 Qt 4.5 版本起,其用于桌面和嵌入式平台的 Qt 跨平台用户界面(UI)及应用程序框架将在开源 LGPL 2.1 版授权下提供。此前,Qt 一直是在通用公共授权(GPL)下提供给开源社区的。”

Qt

诺基亚在新闻稿中宣称,“向 LGPL 的转移将为开源和商业开发人员提供比 GPL 更多的授权权限,从而为开发人员提高了灵活性。此外,Qt 源代码库将更加开放,鼓励更多来自桌面和嵌入式开发人员社区的贡献。随着这些变化,开发人员将能够积极推动 Qt 框架的演进。”

“Qt 4.5 同时也可在商业授权条款下使用,Qt 之前版本的授权则保持不变。而且,Qt 服务将扩展,确保所有 Qt 开发项目,无论选择何种授权,都能获得同等支持。”

更多相关信息,可参见诺基亚发布的新闻稿

2009年1月8日星期四

Ubuntu 扩展 Migration Assistant 的功能

Migration Assistant(迁移助手)这个工具在 Ubuntu 7.04 时引入。之前,此工具只能让用户在安装 Ubuntu 时自动迁移已安装 M$ Windows 系统中的文档、图片、书签等个人数据。现在,Ubuntu 已针对 Migration Assistant 的功能进行了扩展,除了能够从 M$ Windows 迁移个人数据之外,还可以从已安装的 Ubuntu 早期版本中自动迁移用户的数据。对于需要全新安装 Ubuntu 新版本的用户而言,这或许是一项不错的功能。

Migration Assistant

在目前仍在开发的 Ubuntu 9.04 最新 daily LiveCD 中已包含了经过增强的 Migration Assistant 工具。

红旗Linux桌面版 7.0 rc1

红旗软件有限公司(简称红旗软件)由中国科学院软件研究所和上海联创投资管理有限公司共同组建。我们专注于基于Linux的操作系统的开发和市场,以及面 向不断增长的中文技术用户的多平台应用软件。我们的目标是“为网络生活注入活力”。公司将持续发展我们称之为“红旗方式”的一套现代管理模式。这是客户驱 动的用户化,它以我们进行自由软件开发的企业模式为基础。
2009年1月4日北京中科红旗软件技术有限公司发布了红旗Linux7.0 rc1桌面版,截止到目前它是中文化最好的Linux发行版,带有很多新的特性,比如Linux内核为2.6.27.7,支持更多的硬件,KDE桌面环境 为4.1.3,更美观大方,qt为4.4.3,gcc为4.3.2,另外如firefox浏览器采用最新的3.0.5等。
下载地址一 下载地址二 下载地址三 下载地址四
红旗Linux桌面版 7.0 rc1桌面截图:

2009年1月5日星期一

[转] GNOME Platform 概述

GNOME Platform 概述 zhangf

1 写在前面的 这篇概述是根据[1]总结而来的。如果想学习和了解gnome,将[1]作为入手的第一篇文章应该是个明智的选择。关于gnome的历史本文不做赘述。

2 什么是gnome 一般提到gnome,我们有两层意思。第一层,gnome是一种桌面环境(desktop enviroment),而且基本上是unix/linux操作系统上的dextop enviroment, 这一层面上类似于KDE,另一种linux上的流行桌面环境。gnome的第二层意思是一种完善的开发平台,也就是说gnome为开发者构建好了一个平 台,提供了丰富完善的支持,开发者可以在这个平台上开发自己的应用,当然尤其使图形应用。对于一般计算机用户而言,提到gnome时往往指的时第一层的意 思。而对于程序员更多的是指第二层面的意思。 Gnome平台是由众多的模块组成的。这些模块可以被划分为三类,核心(Core Tech),进程间通信与网络(IPC and Networking),和桌面(Desktop Tech)。下面分别介绍。

3 Core Technologies 顾名思义,这部分是gnome的核心和基本架构。包括这些部分:Graphical Interfaces, Virtual File System, Configuration and Lockdown, Internationalization, Accessibility, Multimedia, and Printing.

3.1 Graphical Interface(图形接口) Graphical Interface提供向屏幕绘制图形和与用户交互的能力。Gnome的Graphical Interface由几个很出名的模块组成。

GTK+ GTK+提供了丰富的UI(user interface) controls(控件)和widgets(窗口部件)。例如,各种按钮,输入框,和对话框等。更为重要的是,GTK+提供了一套算法,使得增加新的控件有章可循,从而减轻开发者的工作量。

Libglade 通过Libglade可以从XML描述中动态构造用户界面。这使得构造复杂布局的图形接口变得容易。另外对于图形接口生成器之类的辅助编程工具,Libglade也是值得关注的。

Pango Pango是负责处理字体的模块。

GDK -- GIMP Drawing Kit GTK+依赖GDK与系统的图形设备和输入设备打交道。在linux系统上,这通常是对X系统的一层封装。实际中应用程序员应该很少直接用到GDK。

Cairo Cairo是一个能力强大的关于2D Graphic的库。如果你对2D Graphic有较高的或特殊的需求,可能需要熟悉一下Cario。

GLib GLib是一个通用库,它首先提供了对操作系统一般API的抽象和封装,弱化了应用程序源码对操作系统的依赖。例如它抽象定义了自己数据类型,定义了自己 的内存管理。 其次,平台的提供了一组通用工具函数和对通用数据结构的支持。另外,特别重要的是,虽然是用C语言编程的,GLib中却实现了GObject的架构,它引 进了类似C++中class和Interface机制的支持,除了对GObject的支持,GLib中还实现了signal机制。

3.1.2 其它 还有其它一些库也可以归入到Core Technologies这部分。例如, GnomeVFS提供了一个虚拟文件系统(Virtual File System),基于这个VFS的开发不必再具体考虑不同操作系统的文件系统的差异。 GConf库提供了存取配置信息的能力。有点让人想到Windows的Registry,虽然不完全相同。 Gnome提供了对国际化的支持,它的机制这里不赘述,有详细的文档可以研究学习。 ATK框架(Accessibility ToolKit Framework)解决的是Gnome的accessibility问题。 如果对Gnome的多媒体问题感兴趣,CStreamer绝对需要研究。 Gnome中与打印有关的会涉及到libgnomeprintui库和CUPS (Common UNIX Printing System)。

4 IPC and Networking 这部分负责的功能包括进程间通信和网络。

4.1 Clipboards 和 Drag and Drop Gnome的clipboard和Drag and Drop都支持内容协商(content negotation),也就是宿应用和源应用可以动态协商内容的格式,按需传递内容。

4.2 D-BUS 通过D-BUF机制不同的应用之间,底层部件之间可以传送事件和消息,实现跨桌面(cross desktop)的消息机制。

4.3 Bonobo和CORBA Bonobo基于CORBA,解决部件重用问题。

4.4 Zeroconf Zeroconf实现了网络中查询定位指定服务的功能。

4.4 XML和Web Services 不赘述(todo)。

5 Desktop Technologies 不赘述(todo)。

------------ 6.参考与连接 ------------ 1.http://developer.gnome.org/doc/guides/platform-overview/platform-overview.html 2. 3.