启动X
十月 3rd, 2008
X的启动方法几种
最直接的是运行xinit或xinit firefox,不带参数的话会默认打开一个term,进入这样的X能做的事情很有限(窗口不能移动会互相覆盖),但可以让我们对窗口管理器有一个感性的认识。
startx
在装了某个窗口管理器(如openbox或fluxbox)后,可以用startx命令进入一个带窗口管理功能的X界面。startx是一个在/usr/bin目录下的脚本,它会分别读取用户级和系统级的一些配置,然后用xinit运行X。配置文件有xinitrc,xserverrc,xsession等,一般系统级的配置在/etc/X11目录下,而用户级配置在用户主目录并用.xinitrc的形式命名,原则是用户级配置覆盖系统级配置。
如果系统安装了多个窗口管理器可用startx -m openbox的形式指定,或者在.xinitrc中加一句exec openbox。否则startx会调用/usr/bin/x-window-manager启动默认窗口管理器,它是一个指向/etc/alternatives/x-window-manager的链接,而后者是一个指向真正窗口管理器如/usr/bin/openbox的链接。这个链接通过update-alternative –config x-window-manager维护,但update-alternative是怎样知道系统有多少个窗口管理器呢。
在Debian下用strace -eopen update-alternatives –config x-window-manager监控update-alternatives的文件操作,可以发现它打开了/var/lib/dpkg/alternatives/x-window-manager,这是一个记录了系统安装的窗口管理器的文本文件,估计用Apt安装的窗口管理器都会来这里登记一下。
关于update-alternatives
因为Linux有很多相同功能的软件,alternatives是一个用来统一这些软件的机制,比如我想开一个浏览器只需要运行x-www-browser而不用管系统是装了Firefox还是Opera,alternatives机制会帮我们选择一个可用的。具体实现是在/etc/alternatives/目录创建一些通用的链接,并根据情况指向真实的程序,update-alternatives是Debian用来维护/etc/alternatives/目录下那些链接的Perl程序。如update-alternatives –config x-window-manager用来更新/etc/alternatives/x-window-manager这个链接。
或者还可以安装启动管理器。
启动管理器是一个管理登录的程序,如GNOME用的gdm和KDE用的kdm。用这种方法的话就不需要用户手动输入命令,而是像Windows一样开机后直接得到一个输入帐号密码的登录界面。gdm们获取自动运行机会的方法是把自己加到开机默认运行级别的rc*.d目录。
控制台下的Linux
十月 1st, 2008
图形界面下面的Linux更易于理解也更接近Linux的本质,而且基本上大部分的事情在startx之前就可以完成了。
控制台下的图像处理如mplayer和fb开头的软件都依赖framebuffer,framebuffer是Linux对显示设备的抽象,设备符号一般为/dev/fb0,可以把它理解为一幅显示到屏幕的图像,用户只要修改这幅图像就能修改显示器的视频显示,比如用dd if=/dev/fb0 of=fb.raw就可以截屏,只是因为生成的是raw图像数据,无法用图像浏览软件直接打开,还需用fbgrab等软件处理一下。而 dd if=fb.raw of=/dev/fb0则可以把之前保存的图像写回显示屏。
Debian默认支持framebuffer,但须手动开启,方法是编辑/boot/grub/menu.lst在kernel那行加上vga=ask或0×343,具体值的设置可先用hwinfo –framebuffer确定。
控制台下的软件:
ftp:lftp
http下载:wget
浏览器:lynx
图片浏览:fbi
截屏:fbgrab
编辑:vi
文件管理:mc
影音:mplayer -vo fbdev
鼠标支持:gpm
lynx
export WWW_HOME=www.google.com设置主页。
方向键操作,d下载选中文件。a书签。g跳转。k显示命令列表。
wget
export http_proxy=”http://proxy.com:8080″设置代理。
wget -r -l2 –accept=bz2,gz http://cross-lfs.org/view/clfs-sysroot/arm/materials/packages.html 下载指定页面两层链接内的所有bz2和gz文件。
wget -rkpN -np -t 5 -T 20 URL 抓全站。
lftp
get ,put, mirror,mirror -r,bookmark。
vi
i,a,o,O进入编辑模式。
r修改一个字符后返回Normal模式,R进入修改模式。
x删除一个字符。
dd删除行。
yyp复制行。
http://www.linuxsir.org/bbs/thread245239.html
http://www.linuxsir.org/bbs/thread199931.html
http://fbsplash.berlios.de/wiki/doku.php
控制台字体
十月 1st, 2008
因为当时X还没有开启,控制台不可能用X核心字体或者xft,而是有自己的一套,一般放在/usr/share/consolefonts下。可以用aptitude install console-terminus安装专门为其准备的console-terminus字体,这是一套适合控制台使用很漂亮的等宽字体。
在使用之前,用unicode_start打开Unicode模式。
whereis unicode_start
vi unicode_start
db_mode -u
dumpkeys | loadkeys –unicode
consolechars –font= –sfm=
echo -n -e ‘33%G’
这个脚本先把键盘置于Unicode模式,然后用consolechars工具接受我们传来的参数设置字体,最后用echo -n -e ‘33%G’命令把控制台置为Unicode模式。
自己设置字体的话,先ls /usr/share/consolefonts浏览字体。
consolechars -f Uni3-TerminusBoldVGA16查看效果。
确定了以后在/etc/console-tools/config中修改SCREEN_FONT为自己指定的字体。
如SCREEN_FONT=Uni3-TerminusBoldVGA16.psf
控制台只能使用这种psf字体,而系统提供的包括安装的Terminus字体中都没有中文字符,所以有Unicode编码的中文名文件时用ls命令查看会是一些小方框。
所以如果想让控制台支持中文显示以及输入,还需要其他更麻烦的步骤,如安装zhcon,然后用zhcon –utf8开启一个新的支持中文的控制台,那样刚才针对fb设置的字体都会无效。
也可以安装unicon,unicon通过修改内核提供中文支持,需要重新编译内核。另外还有fbiterm, jfbterm等。
http://www.turbolinux.com.cn/products/tlw/tlc/node143.html
http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=194&blogId=1
locale设置
九月 30th, 2008
locale -a列出所有locale
Debian可用dpkg-reconfigure locales重新配置locale。
或者手动编辑 /etc/locale.gen(从/usr/share/i18n/SUPPORTED选择想要的locale),然后运行locale-gen。
编辑/etc/defaults/locale设置默认local。
locale变量:
LANG 语言
c程序运行时会依次检查LC_ALL,LC_CTYPE,LANG并使用第一个有效值作为locale并加载相关locale data。
所谓的locale主要就是决定字符的解码方式,以及数字时间货币等每个地区不同的显示方式。
LANG=en_US.UTF-8
en语言,US国家,utf-8编码。en_US.UTF-8和zh_CN.UTF-8的区别,不是说有几种UTF-8,而是前面两个变量的区别。任选一种带UTF-8的locale就可以正常显示中文,只是货币时间等的表示会有不习惯,另外输入法会依赖中文locale。
LC_CTYPE定义字符编码。
LC_COLLATE定义字符串如何排序。
其他的LC_都是自解释的,就不赘述了。
LC_ALL和LANG都可以做LC_*没有设置时的默认值,但LC_*单独设置时只能覆盖LANG加与的默认值,LC_ALL的默认的优先级别最高,一旦设置了LC_ALL其他的设置都会无效。所以一般只设置LANG和LC_CTYPE。
比如LANG=en_US.UTF-8
LC_TYPE=zh_CN.UTF-8这样就可以配一个使用中文的英文环境。
Debian版本升级
九月 29th, 2008
Debian目前的版本:
sid (unstable)
lenny (testing)
etch stable
sarge oldstable
lenny本来据说这个月会成为新的stable,但现在都快十一了还没有动静。当时被名字误导选了stable所以一直在用Etch,因为Debian非常注重软件的稳定性,稳定版Etch里的软件版本都很老,而个人用户完全没有必要那么保守。所以决定不等官方了直接升级到testing。
Linux发行版的版本号其实是很人为的东西,所谓版本最基本的是Linux内核和其他常用软件的版本,Linux各种发行版最多只是软件的组织形式不同,所以只要自己编译了最新的内核,安装了最新的软件,那就是最新的发行版了。
对于Debian来说,要装更新的软件,最直接的方法是自己上软件发布的网站下载源码编译。用APT的话,需要更换apt的源。
Source.list文件中
deb http://some-server/debian etch main
对应的是http://some-server/debian/dists/etch/main/这样的网址,一般这样的网站也会提供http://some-server/debian/dists/lenny/main/这样的地址,所以只需把source.list文件中的etch换成lenny。
然后aptitude update。这样以后装的软件都是lenny下的版本了。
但因为软件的依赖,还需要升级一下各种库,同时也可以升级以前安装的软件。
aptitude upgrade
aptitude safe-upgrade
如果source.list中同时有etch和lenny可以用
aptitude install nano/lenny选择。
而在 /etc/apt/apt.conf中用,
APT::Default-Release "testing";
APT::Get::Assume-Yes "true";
来设置默认。
升级内核
aptitude search linux-image
找到想要的内核aptitude install之。
reboot。
备注:用apt-get dist-upgrade升级会remove一些程序,推荐aptitude safe-upgrade。
source.list中用testing或stable标记源比etch,lenny这样的版本代号要好一点。
Linux字体
九月 14th, 2008
Linux字体技术有核心字体和xft两种。
二者最表面的区别是核心字体有一个”无法想象的超长名称”,如biznet-fixed-medium-r-normal–16-120 -100-100-c-80-iso8859-2这样。用xlsfonts查看命令可以输出一卡车的数量。一般只有老一点的程序如 rxvt, aterm在配置字体的时候会用到。相比之下xft字体的名字更现代一点通常是一个简单的单词。
xft依赖 fontconfig维护系统中的字体。
而fontconfig包括四个工具
fc-list,fc-cc-cache,fc-cat,fc-match。
fc-cache -vf 查看和更新所有注册的fonts目录下的字体。
fc配置目录在/etc/fonts/ 和~/.fonts.conf。
http://fontconfig.org/fontconfig-user.html 或man fonts-conf
指明字体目录等相关信息。
Fontmatrix 图形化工具。貌似没有apt好的包,要自己编译http://phorolinux.com/manage-fonts-with-fontmatrix.html。
FreeType是一个把字体文件转化成位图的引擎。因为TureType等字体是一些向量描述,以便支持缩放。这个过程中还要考虑到抗锯齿和hinting等功能。hinting用来保持字体缩放后的对齐,并适当加强字体边缘的对比度来取悦我们的眼睛。FreeType用autohint来自动处理hinting,高质量的商业字体都会内置人工处理过的hint信息以达到最佳显示效果,不过FreeType不会使用这些有版权的信息,所以即使雅黑能在xft中正常显示也会和Windows下的很不一样。
字体有两个系列Serif和Sans。Serif在笔画收尾的地方是尖的。Sans就是不尖的。
字体另一种划分是等宽字体和变宽字体。
proportional font即变宽字体中l和m两字符占的宽度是不一样的,雅黑就是一种变宽字体。
mono字体又叫fixed-width字体即等宽字体。顾名思义在这种字体中每个字符宽度是一样的,这种字体在编程中用处比较大,可以便于认清1和l,0和o的区别,也被称为程序员专用字体。微软新出的Consolas字体就是这种。
矢量字体和点阵字体。点阵字体中的字形是固定的位图。矢量字体通过数学曲线来描述每一个字形,可以缩放。
Debian网卡设置
九月 12th, 2008
vi /etc/network/interfaces 网卡配置文件
回环网卡lo
auto lo
iface lo inet loopback
第一块网卡eth0
auto eth0
#DHCP
iface eth0 inet dhcp
#静态IP
iface eth0 inet static
address 172….
netmask 255….
gateway 172…
dns-nameservers 172…
或在/etc/resolv.conf 设置DNS服务器。
nameserver 172…
重启网卡
/etc/init.d/networking restart
ifdown eth0
ifup eth0
Debian在/etc/udev/rules.d/z25_persistent-net.rules绑定MAC地址与eth0这样的interface名。如果更改了网卡物理地址或新换了网卡,需把这里的名字与/etc/network/interfaces里的同步。
如果用了DHCP协议,/etc/dhcp3/dhclient.conf也是一个需要查看 的地方。
X-Server
九月 4th, 2008
远程桌面或RealVNC连接服务器传过来的是图像数据,而通过X-Server方式传递的是显示指令(XDMCP协议),本地的X-Server通过这些指令把远程机器上运行的程序界面画出来,远程服务器上运行的程序是本地X的Client,这是这两种方式的根本区别。
X是Linux下GUI的基础,王垠的这篇 “ 理解 Xwindow “ 可以帮助理解X的概念。
Linux下的桌面显示是按照X->metacity->Gnome这样的层次,无论是远程的Client还是本机上运行的程序,X都用一视同仁的方式显示,灵活性是显而易见的,但也会带来性能上的成本,对于开机必然使用图形界面的大部分Ubuntu用户,这种tradeoff显然是不值得的,对于这些用户Windows在内核级别支持图形界面以获取更高性能的方式更适合,这也是我不看好Ubuntu的一个原因。
远程使用X的方法很简单,不得不赞一下设计者。以下过程我用的是Windows上的Cygwin X连接虚拟机上的Debian系统。
本地的X Server运行
xhost + 172.27.56.145 //允许172.27.56.145 使用X Server。
在172.27.56.145的Term下运行
export DISPLAY=172.27.56.158:0.0// 指明使用的X-Server为172.27.56.158 :0.0 。
然后运行一个GUI程序,如geidt&。
然后在本地桌面会出现一个gedit程序的界面,即使本地没有安装这个程序。
DPKG就是Debian
八月 24th, 2008
Linux众多发行版的本质区别是什么?文件系统,内存管理,进程调度这些操作系统最核心的功能都在内核包里了,所有的发行版都是一样的。区别都在应用层面了,主要就是提供的二进制软件包的丰富程度,和安装便利性,如此来说,dpkg这个Debian系列特有的软件安装方式就是Debian的核心了,不知道这样理解是不是正确。
Linux确实需要统一一下,虽说参差多态才是生活的本源,但程序在二进制的层面的不兼容的确让人很困惑,就算提供源码一般人也是不会愿意configure ,make这样安装程序吧,而且大一点的程序动辄几个小时的编译时间也超过了方便与否的范畴。
在Gui和Cui之间切换
六月 23rd, 2008
Linux 在nautilus和term间
习惯用图形界面浏览文件,但很工作要在终端下才能做,于是要不停的切换。
xterm下”nautilus .”直接以当前目录打开nautilus。
~/.gnome2/nautilus-scripts文件夹下面新建一个名为term的文件,内容为 :
#!/bin/bash
gnome-terminal
chmod a+x term加上可执行权限。
然后在Nautilus中就可以通过右键,Scripts,term打开一个当前目录的term。
http://g-scripts.sourceforge.net/
Windows在explorer和cmd之间
cmd下”explorer .”直接以当前目录打开explorer。
文件夹右键打开cmd。
可以装微软powertoys里的cmdhere(不支持windows 2003)
也可以把以下代码保存为cmdhere.reg,双击导入注册表。
REGEDIT4
[HKEY_CLASSES_ROOT\*\shell\cmdhere]
@=”Cmd&Here”
[HKEY_CLASSES_ROOT\*\shell\cmdhere\command]
@=”cmd.exe /c start cmd.exe /k pushd \”%L\\..\”"
[HKEY_CLASSES_ROOT\Folder\shell\cmdhere]
@=”Cmd&Here”
[HKEY_CLASSES_ROOT\Folder\shell\cmdhere\command]
@=”cmd.exe /c start cmd.exe /k pushd \”%L\”"