分类目录归档:Linux

Ubuntu 脱坑指南

点击量:5

希望本文能够给读者较少一些不必要的困扰。书写顺序较为随意,以
“从安装到使用”这个为主线行文。

安装时

本文不在此具体介绍如何安装Ubuntu。对于安装过程的建议,本文会写在
内容之中。安装之前,建议阅读本文。

使用非定制的ISO

不要使用Lubuntu,Kubuntu甚至Gnome Ubuntu这些更改了默认桌面环境的Ubuntu。
对于新手而言,Ubuntu本身就很脆弱,使用这些定制的ISO,不仅不利于提升用户
体验,反而会在非重点的地方极大的消耗时间。对了,Kylin也是不推荐的,尽管
官方甚至都把它挂在了首页。

唯一建议使用的ISO是官方下载地址

使用英文系统

中文系统可能会导致许多问题。比如,如果一个软件不支持中文路径,你可能需要
排查很久才能想到这个问题。除此之外还有其他的一些问题,比如在命令行中进入
一个目录,你可能需要切换输入法,然后再切换回来,十分不方便。还有一些暗含
的问题,我已经记不清了,也没有精力去探索这些问题,因为我们的目的是“脱坑”。

因此,使用英文作为系统语言可以解决很多问题。唯一引入的问题可能是英文的阅
读障碍。我想这应该是一个需要克服的问题。

如果使用英文調不出輸入法,可以嘗試添加中文支持,再去掉

不要挑战花式安装

我这里的花式安装是指,/home做一个分区,/boot做一个分区这种事;还有就
是在固态上放一个区,在其他位置再放一个区等。这种事情不要做。是的,不要做。
在我看来,这种事情毫无意义,对于新手而言,基本上不会有时间让系统稳定到
硬盘不够用。

把根目录/挂到一个大分区下,100G,所有问题就都解决了。当空间不足需要重装,
恭喜,你可能已经不是新手了,很多问题都可以不再按照此指南进行了。你可以
尝试按照你自己的意图去配置系统了。

使用

下面是使用部分。使用部分是,第一次进行安装之后,第一次进入桌面。

不要添加第三方PPA

我把这条忠告写在最前面。如果你不知道什么叫做第三方ppa,那么很好,
我的意思是,在你了解它是什么之前,不要通过aptsoftware center
以外的方式安装软件。这可以很大程度的保护你的软件包管理工具。修复
软件包管理工具需要消耗的时间可能很多,而且问题往往是链式的,总会
给新手造成“我以为我解决了”这样的错觉。

sudo add-apt-repository ppa:kelleyk/emacs 这就是我所说的PPA。

Vim 和 Emacs 都是我的最爱。

不要在输入法上耗费太多时间

输入法如果花费一上午都没有解决的话,建议放弃。因为Ubuntu官方的版本
有时候给出的中文输入法都可能无法使用。

如果真的需要输入中文,可以先考虑使用中文搜索引擎做pinyin的转换。不过
你真的需要中文,并且在Ubuntu下做文字处理的工作吗?

多运行apt-get update

是的。更换国内源这个事情我是建议的,个人对于tsinghua的源非常喜欢,
尽管它崩的概率也有点高,不过在ipv6以及速度上都太令人满意了。
源的不稳定可能造成的问题是,没有完全将软件依赖更新好。

如果你不知道我在说什么,没关系,apt命令出现问题时,多运行apt-get update
就可以了。

官方文档为主

Ubuntu的很多问题,都是国内博主在写文章时比较随意造成的(我也挖这种坑)。
在进行软件安装的时候,新手往往在国内搜索某个教程就复制粘贴了。这是非常
容易出问题的,且不论安全性,甚至教程本身都无法使得软件正常运行。这里面
包含很多种可能:文章不再更新,系统已经不适配;教程缺斤少两等等。

安装软件先以官方文档为主,也就是软件的官方网站,一般都会有文档。文档可能
不好读,但是起码能够减少问题。其次是Ubuntu官方的安装指南;再其次是google
第一位的安装指南(前提是新手能明白每一步都在做什么);没有最后。

能用apt-get install解决的问题,不要通过make解决。

尽量不使用sudo

除非是按照官方文档进行操作(不排除无良软件开发者挖坑导致运行时出问题),
否则使用sudo,这个超级用户权限,可能带来很多问题。比如运行库版本不匹配,
图形界面挂掉等等。

常见问题解决方案

这里列出一些常见问题,以及解决的方法。

所有问题

重启。

图形界面崩

sudo apt-get install --reinstall ubuntu-desktop

补充

其他常见问题可以通过blog#svtter.cn与我沟通,我将做出补充。

获取本机ipv6地址

点击量:2

获取本机ipv6地址,最简单的方法:

cat /proc/net/if_inet6

还可以使用python的netinterface包。

ifconfig也是从这个文件进行获取的,只是优化了一下格式。

reference

  1. https://blog.lilydjwg.me/2012/6/6/get-ipv4-and-ipv6-addresses-of-local-host-in-a-programming-way.34055.html

使用 grub customizer 调教grub

点击量:2

调整grub总是需要搜索某个文件,某个配置,相当麻烦,近期找了一个比较不错的图形化配置管理器,grub customizer,可以调整启动的内核,以及启动的画面,非常好用,安利一发。

安装

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

使用截图

【日后补上】

reference

  • http://ubuntuhandbook.org/index.php/2016/04/install-grub-customizer-ubuntu-16-04-lts/
  • grub讲解

Linux-makefile写法

点击量:3

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

makefile写法有复杂的有简单的,我这里提到的主要为了做一些简单的开发,所以还是说些简单的事情。

使用makefile之前,要学会使用bash的一些东西。鸟哥的私房菜虽然说是介绍Linux,但是总感觉很多都是介绍bash,以及和
bash配合使用的一些命令。。。

变量的写法

  • 定义的时候直接使用VAR = main.o即可这种格式即可
  • 使用的时候使用${VAR}这种形式来使用,类似于php中的变量。

另外, 位于makefile外面的变量也是可以使用的,使用的时候使用如下格式VAR = main.o make即可,这样就相当于在makefile
定义了一个VAR变量。在外定义的变量是优先于makefile里面的变量的,就像是一个预订义的函数一般。

此外,$@表示当前的目标。如果在clean那里面,$@指的是clean

make + 命令写法

  • 比如make clean的写法,就是在makefile文件中添加

    clean:
    rm .. (类似bash的使用方法,这个地方也可以使用变量)

相对的,install等等的方法就类似于这个上面的写法了。

写到这里也是明白了为什么vim里面有个make命令,却没有各种编译命令了= =

然后附加一个自己写的第一个makefile:(为了读者更加容易理解,我没有使用变量)

run: t2.o test.o
    cc -o run test.o t2.o
    ./run
test.o: test.c
    cc -c test.c
t2.o: t2.c
    cc -c t2.c
clean:
    rm *.o
    rm run

test.c:

#include <stdio.h>
/* #include "t2.h" */
typedef struct test
{
    int a, b;
}test;
test b;
int main(int argc, const char *argv[])
{
    output();
    b.a = 1;
    b.b = 2;
    printf("%d %d\n", b.a, b.b);
    return 0;
}

t2.c:

#include <stdio.h>
void output()
{
    printf("This function is in t2.c\n");
}

文件目录是:
– file
– makefile
– test.c
– t2.c

  • 使用make可以创建链接文件并且运行。
  • 使用make clean可以删除生成的文件。

Linux-软中断通信

点击量:5

本文出自svtter.com
本文可以随意转载,但是转载请保留本信息.

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <unistd.h>
#include <wait.h>
void waiting(), stop(), alarming();
int wait_mark;
int main()
{
    int p1, p2;
    if(p1 = fork())
    {
        if(p2 = fork())
        {
            wait_mark = 1;
            signal(SIGINT, stop);
            signal(SIGALRM, alarming);
            waiting();
            kill(p1, 16);
            kill(p2, 17);
            wait(0);
            wait(0);
            printf("parent process is killed!\n");
            exit(0);
        }
        else
        {
            wait_mark = 1;
            signal(17, stop);
            signal(SIGINT, SIG_IGN);
            while(wait_mark!=0);
            lockf(1,1,0);
            printf("child process2 is killed by parent!\n");
            lockf(1,0,0);
            exit(0);
        }
    }
    else
    {
        wait_mark = 1;
        signal(16, stop);
        signal(SIGINT, SIG_IGN);
        while(wait_mark!=0);
        lockf(1, 1, 0);
        printf("child process1 is killed by parent!\n");
        lockf(1, 0, 0);
        exit(0);
    }
    return 0;
}
void waiting()
{
    sleep(5);
    if(wait_mark != 0)
        kill(getpid(), SIGALRM);
}
void alarming()
{
    wait_mark = 0;
}
void stop()
{
    wait_mark = 0;
}

执行结果

e3.png

archlinux-安装笔记2-常用软件转载

点击量:2

本文出自svtter.com

1 Installing Arch Linux
* 1.1 Pre-Installation
是i686 架构吗Pentium II or AMD K6-2以上)?安装方式CD? FTP
* 1.2 Acquiring Arch Linux
从这里寻找速度最快的镜像
http://wiki.archlinux.org/index.php/Mirror
* 1.3 Preparing Installation Media
MD5 校验烧录
* 1.4 Using the CD-ROM
设置好光驱启动
* 1.5 Common Installation Procedure
o 1.5.1 Loading a non-US Keymap
用km 工具选择非英语键盘
o 1.5.2 Running Setup
# /archlinux/setup
o 1.5.3 Configure Network (FTP Install only)
仅适用于FTP 安装方式CD 安装没有必要配置好网络
o 1.5.4 Prepare Hard Drive
给磁盘分好区root分区(/)放在主分区比较好放到逻辑分区也可以),
如果有 Windows 系统那它也要占据一个主分区个人的250G硬盘是这样分区的
# cfdisk
sda1          /boot        150M             xfs
sda2          Windows      18G              ntfs
sda3          FreeBSD      32G              ufs
sda5          /            600M             xfs
sda6          SWAP         2xRam            xfs  (SWAP分区的大小推荐为内存大小的2倍)
sda7          /var         20G              xfs
sda8          /tmp         5G               xfs
sda9          /opt         10G              xfs
sda10         /usr         20G              xfs
sda11         /home        105G              xfs
sda12         Files        不大于32G        fat32
如果需要加密磁盘并启用开机验证推荐使用luks 
通常加密 root 分区和 /home 分区
# modprobe dm-crypt
# modprobe aes-i586
# cryptsetup y luksFormat /dev/sda3
输入密码确认
# cryptsetup y luksFormat /dev/sda10
输入密码确认
# cryptsetup luksOpen /dev/sda3 root
解开root 分区并建立一个映射/dev/mapping/root
# cryptsetup luksOpen /dev/sda10 home
解开 /home 分区并建立一个映射/dev/mapping/home
参看http://wiki.archlinux.org/index.php/LUKS_Encrypted_Root
o 1.5.5 Partition Hard Drives
可以跳过了
o 1.5.6 Set Filesystem Mountpoints
如果用luks 加密了分区那么 / 分区需要挂载到/dev/mapping/root
/home 需要挂载到/dev/mapping/home.
同时选择一个合适的文件系统JFSXFSReiserfs...)。
o 1.5.7 Select Packages
至少选择 Base 安装如果需要一个可编译环境要选上devel和lib如果需要ADSL拨号
或WiFi支持要选上support
确定后会看到所有将要安装的包可以在这里去掉一些暂时不想安装的包要是不清楚就
不管了几个M的大小而已
o 1.5.8 Install Packages
只要烧录的光碟不是太差基本上都能正常安装的
o 1.5.9 Configure System
配置系统是必须和关键的应当允许hwdetect script自动检测硬件并生成相应配置
根据启动时的实际情况选择是否需要对RAIDLVM2和encrypted volumes的支持以及
其它必要的支持
选择熟悉的编辑器后 /etc 下的生成的配置文件作适当的修正
rc.conf设置时区为Asia/Hong_Kong检查eth0的配置是合适
mkinitcpio.conf在最后一行的HOOKS 中去除不必要的支持
hosts 设置主机名和域名
locale.gen设置本机要支持的locale zh_CN.utf8,zh_CN.gbkor zh_TW.utf8
root PassWord为root 设置管理密码
pacman Mirrors设置安装源找一个高速镜像站点比如
http://mirrors.lcuc.org.cn/archlinux/ http://ftp.archlinux.org/ 
http://ftp.belnet.be/packages/archlinux/ http://ftp.gigabit.nu/
http://archlinux.puzzle.ch http://mirror.cs.vt.edu/pub/ArchLinux/ 
http://ftp.heanet.ie/mirrors/ftp.archlinux.org/
http://distro.ibiblio.org/pub/linux/distributions/archlinux/
o 1.5.10 Install Kernel

o 1.5.11 Install Bootloader
推荐GRUB配置好menu.lst
如果root 分区用luks 加密过了那么要把menu.lst 修正为
# (0) Arch Linux
title Arch Linux
root (hd0,0)
kernel /vmlinuz26 root=/dev/sda3 ro
initrd /kernel26.img
注意Bootloader 需要安装到MBR sda ),而不是 /boot 所在的分区sda1)。
o 1.5.12 Exit Install
退出安装程式后取出安装光盘
# head -n 300 /dev/urandom | tail -n 256 >/mnt/etc/home.key
# cryptsetup luksAddKey /dev/sda10 /mnt/etc/home.key
输入密码确认
# echo home /dev/sda10 /etc/home.key >>/mnt/etc/crypttab
开机时用home.key 解开 /dev/sda10
# sed -i /swap/d /mnt/etc/fstab   删除fstab 文件中含有swap 的一栏
#echo swap /dev/sda2 /dev/urandom "-c   aes-cbc-essiv:sha256 -h sha256 -s 256" >>/mnt/etc/crypttab
# echo "mkswap /dev/mapper/swap" >>/mnt/etc/rc.local
以上两个命令是设置swap 加密分区
另外直接在/etc/crypttab 中加入如下内容也起相同作用
swap /dev/sda2  SWAP -c aes-cbc-essiv:sha256 -h sha256 -s 256
# reboot
2  基础配置
* 2.1  Internet Access
如果是局域网视讯宽等无需拨号的网络环境只需要在/etc/rc.conf中设置好
eth0="dhcp"
重启电脑后即可正常上网了
如果是用PPPOE协议拨号上网如ADSL),需安装rp-pppoe安装包然后
# pppoe-setup
# /etc/rc.d/adsl start
# /etc/rc.d/adsl stop
或者使用更好的ppp 安装包参照WiKi 
* 2.2  更新安装包列表
# pacman Syu
更新安装包列表并升级已安装的包和内核比自己make world要快多了
# reboot
# pacman-optimize
这是优化pacman系统如果安装时仅选择了base安装那么优化可能不会成功因为缺少
diffutils安装包(它在devel里面)安装它就可以了
# pacman -S diffutils
安装AUR 工具建议安装好软件多多):
# vi /etc/pacman.conf, 加入:
[archlinuxfr]
Server = http://repo.archlinux.fr/i686/
# pacman -Sy yaourt   (安装一个Pacman前端如果碰到服务器调整那就装不了啦
# yaourt -S tupac     (速度更快的Pacman前端依赖于yaourt)
# tupac -S aurvote
可以通过aurvote对喜欢的AUR软件投票如果票数够多了该软件就会被加入Community
aurvote -h来查看使用帮助
如果要对yaourt和tupac这两个软件投票可以这样做
(1)  http://aur.archlinux.org/account.php 注册一个帐号
(2) vi ~/.aruvote加入
user=YourName
pass=YourPassWord
(3) aurvote -v yaourt tupac
* 2.3  安装多线程多协议的下载工具aria2
# pacman -S aria2
# echo "XferCommand = /usr/bin/aria2c –s 3 %u" >>/etc/pacman.conf
用aria2替换默认的wget来安装软件如果带宽足够大就不需要用aria2了
* 2.4 根据个人习惯安装其它Shell如zshksh),当然使用默认的Bash也很好
$ sudo pacman -S zsh
关于ZSH的介绍可以参照Wiki:
http://wiki.archlinux.org/index.php/Zsh
可从中获取配置好的 .zshrc 文件放入$HOME中
$ chsh -s /bin/zsh
$ source ~/.zshrc
* 2.5  安装sudo用普通用户进入系统
创建一个账户
# useradd mG users,audio,optical,storage,wheel -s /bin/zsh yourname
创建一个限制用户有声音支持有HAL 支持能切换到root 权限
# passwd yourname  (如果还没有为root创建密码要先 #passwd root)
# cd /home/YOUNAME/ && cp ~/.zshrc ./ && chown YOUENAME ./.zshrc
# pacman -S sudo
# vi /etc/sudoers
加入yourname ALL=(ALL) NOPASSWD: SETENV: ALL
或直接对用户组作出相应设置
如果主机上会有多个终端同时在用还要加入"visudo"/etc/sudoers
sudo 命令补全注意仅适用于Bash):
# pacman -S bash-completion
# echo source /etc/bash_completion >>/etc/profile
# source /etc/profile   或exit, 用普通用户重登录
* 2.6 开启控制台鼠标 (gpm 支持) 方便控制台下浏览网页
在控制台下浏览网页的工具有elinks(英文网页), w3m在CCE下可浏览中文网页):
$ sudo pacman elinks w3m cce
用elinks等工具在控制台下浏览网页如果没有鼠标支持实在是很郁闷的事情
$ sudo pacman -S gpm
$ sudo vi /etc/conf.d/gpm, 加入:
GPM_ARGS="-m /dev/misc/psaux -t ps2"   (PS/2) or
GPM_ARGS="-m /dev/input/mice -t imps2"  (USB)
$ sudo gpm -m /dev/input/psaux -t ps2   (PS/2) or
$ sudo gpm -m /dev/input/mice -t imps2"  (USB)
如果已经正常工作,把gpm 加到rc.conf中的DAEMONS 数组中,让它开机自动运行。
* 2.7 Post Installation Tips
(1) Colorize your PS1 and Console
编辑SHELL的配置文件(如 ~/.bashrc),加入:
export LS_COLORS='no=00:fi=00:di=01;37;44:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mng=01;35:*.xcf=01;35:*.pcx=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.avi=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.mov=01;35:*.qt=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.patch=00;32:*.diff=00;32:*.log=00;32:*.tex=00;32:*.doc=00;32:*.mp3=01;32:*.wav=01;32:*.mid=01;32:*.midi=01;32:*.au=01;32:*.ogg=01;32:*.flac=01;32:*.aac=01;32:';
关于提示符的修改,参看一下:http://bbs.linuxsir.org/showthread.php?t=223.44
(2) 实现彩色版的 Manpages
$ sudo pacman -S most 
$ vi /etc/man.conf file, change the PAGER and BROWSER variable to: 
PAGER   /usr/bin/most -s 
BROWSER  /usr/bin/most –s 
$ vi ~/.mostrc,add: 
color normal brightwhite black
color status yellow blue
color underline white lightblue 
color overstrike brightcyan black
不过用most是有一些不便之处的,这时可以试试下面的方法,真的挺不错:
1. 在你的主目录创建 .terminfo 目录,并转到该目录:
mkdir ~/.terminfo/ && cd ~/.terminfo
2. 从作者网站获取 terminfo 描述文件:
wget http://nion.modprobe.de/mostlike.txt
3. 使用 tic 命令编译 mostlike.txt 文件(编译后可删除):
tic mostlike.txt
4. 在SHELL的配置文件中定义别名:
alias man="TERMINFO=~/.terminfo/ LESS=C TERM=mostlike PAGER=less man"
现在使用 man 指令就可以读到彩色版的 Manpages 了。如果你需要修改 terminfo 文件,则可以使用 infocmp mostlike。
(3) Timesaving Command-aliases
编辑SHELL的配置文件(如 ~/.bashrc),加入: 
alias ls='ls --color=auto' 
alias la='ls -a --color=auto' 
alias ll='ls -aoth --color=auto'
alias p='sudo pacman' 
alias t='sudo tupac' 
alias x='startx' 
alias pq='pacman -Q |grep'
alias pa='sudo pacman -S' 
alias pas='sudo pacman -Ss' 
alias pau='sudo pacman -Syu' 
alias pay='sudo pacman -Sy' 
alias pao=”sudo pacman-optimize” 
alias pasch='pacman -Sl | cut -d' ' -f2 | grep ' 
alias tp='sudo tupac -S' 
alias tps='sudo tupac -Ss' 
alias tpu='sudo tupac -Syu' 
alias tpy='sudo tupac -Sy' 
alias vi='vim' 
alias v='sudo vim' 
alias ps='ps ax'
alias m='less –s'
3  安装一个桌面
* 3.1 xorg
$ sudo pacman -S xorg
$ sudo X –configure 
$ sudo vi xorg.conf.new    (作出适当的修正) 
$ X -config xorg.conf.new  (测试一下配置文件是否能正常工作,用Ctrl+Alt+Backspace退出X)
$ cp xorg.conf.new /etc/X11/xorg.conf
如果发现“X -configure”不能正确配置某些硬件(比如鼠标),可以试试hwd命令:
$ sudo pacman -S hwd && sudo hwd -xa
它会在/etc/X11/自动生成一个xorg.conf,并备份原有的文件。
* 3.2 安装显卡驱动
装完Xorg后,就已经有了一个通用的VESA驱动了。不过对图形加速支持得不太好。
一般显卡的开源驱动可以用:pacman -Ss xf86-video 来搜索到。不过要想较好的支持3D
性能,还需要使用厂商提供的驱动:
ATI显示芯片:tupac -S catalyst ,参考http://wiki.archlinux.org/index.php/ATI
Nvidia显示芯片可用:tupac -Ss nvidia 来搜索,并参考:http://wiki.archlinux.org/index.php/NVIDIA
不过个人认为,对于Nvidia的显卡,最好是直接使用其官方网站上的驱动,下载地址是:
http://www.nvidia.cn/Download/index.aspx?lang=cn
下载最新的Linux驱动(当前是NVIDIA-Linux-x86-169.09-pkg1.run),然后:
$ sudo sh NVIDIA-Linux-x86-169.09-pkg1.run
*3.3 安装字体
$ sudo pacman –Sy ttf  |less  (从安装包列表中查找可用的字体包) 
$ sudo pacman –S sdl_ttf font-bh-ttf ttf-dejavu ttf-fireflysung ttf-ms-fonts
当前的开源字体已经相当不错了,尤其是文泉驿字体。
安装文泉驿点阵宋体和正黑体。当前已经进入Community 了。
$ tupac -S wqy-bitmapfont wqy-zenhei
$ sudo vi /etc/X11/xorg.conf ,增加字体路径 
如果没有安装 fontconfig ,就用 pacman 安装一下,然后,
下载本文附件:fonts.conf.tar.gz ,并解压到 $HOME下:
$ tar zxf fonts.conf.tar.gz  -C ~/
这会在 $HOME下产生一个 .fonts.conf 文件,可以优化中文显示。
如果磁盘上有Windows系统,也可以:
$ sudo mkdir /usr/share/fonts/msfonts 
复制一些Windows 字体到此目录下,如:msyh, simhei, simyou 
并自行编辑.fonts.conf 文件。当然了,最好不要使用Windows字体,因为是有版权的。
*3.4 安装一个顺手的整合桌面环境或窗口管理器
o 3.4.1 gnome
$ sudo pacman -S gnome  (gnome-extra是附加软件,自行选择安装)
o 3.4.2 kde
$ sudo pacman -S kde
o 3.4.3 xfce + idesk
$ sudo pacman -S xfce4 idesk (xfce4-goodies是附加软件,自行选择安装)
o 3.4.4 e17 + idesk
$ sudo pacman -S e17 idesk
o 3.4.5 fvwm + idesk
$ sudo pacman -S fvwm idesk (如果要安装最新版本,需自行下载编译安装)
o 3.4.6 openbox + rox-filer + lxpanel + idesk
$ sudo pacman -S openbox rox lxpanel idesk
o 3.4.7 windowmaker + rox-filer + *dockapp + idesk
$ sudo pacman -S windowmaker rox lxpanel idesk
$ pacman -Ss dock , 然后安装中意的dockapp
安装上面任一桌面后,可能还要安装和启用一个顺手的登录管理器,主要有:
XDM,GDM,KDM,Entrance, SLIM.
如果要启用gdm,需注释掉/etc/inittab 中“x:5:respawn:/usr/bin/xdm –nodaemon” 
这一行,另在/etc/rc.conf 中的 DAEMONS行中加入 gdm,可使开机时自动运行。
~/.profile 文件中的命令是gdm 登录时会默认调用的。其它与之相似。
如果不用登录管理器,就配置好~/.xinitrc,用"startx"命令,直接从Console下进入。
参考:
http://wiki.archlinux.org/index.php/{Gnome,Kde,Xfce,E17,Openbox,GDM,KDM,SLIM}
http://www.fvwm.org
http://slim.berlios.de
http://icculus.org/openbox/index.php/Main_Page
http://www.windowmaker.info
http://roscidus.com
http://idesk.sourceforge.net
* 3.5 安装中文输入法(fcitx,or scim)
o 3.5.1 fcitx
$ sudo pacman -S fcitx 
$ cat >>~/.profile <<EOF 
> LC_CTYPE="zh_CN.utf8" 
> export XMODIFIERS=@im=fcitx 
> export GTK_IM_MODULE=xim 
> export QT_IM_MODULE=xim 
> fcitx & 
> EOF
o 3.5.2 scim
$ sudo pacman -S scim-tables   (或安装scim-fcitx。要用拼音,安装scim-pinying)
$ cat >>~/.profile <<EOF 
> LC_CTYPE="zh_CN.utf8" 
> export XMODIFIERS=@im=SCIM
> export GTK_IM_MODULE="scim"
> export QT_IM_MODULE="scim"
> scim -f socket -c socket -d
> EOF
# cp ~/.profile ~/.xinitrc 
# echo exec gnome-session >>~/.xinitrc  
这是startx 调用的配置文件。用“>>”,确保了gnome-session是最后被执行的命令。 
# startx
4  安装常用软件
* 4.1 X下的虚拟终端
roxterm,tilda和yakuake都是相当棒的虚拟终端。
toxterm同gnome-terminal相似,却要小巧得多。
Tilda 可用于 GNOME、Xfce 桌面,而 Yakuake 主要用于 KDE 桌面。它们都具有热键控制,
桌面嵌入,背景透明,动画效果,标签页功能和可定制性。
个人偏好tilda,直接用Pacman命令安装:
# pacman -S tilda (不过最近Gnome的MetaCity似乎对Tilda不太友好,老是找不到焦点)
* 4.2 网络浏览
使用经过优化的更小巧快速的 swiftfox 来代替Firefox。
如果安装了elinks,可以先:
$ elinks http://getswift.com/installer.htm
看看有哪些版本可以下载,结合电脑处理器的类型下载,如Pentium 4的CPU:
$ aria2c –s 4 http://getswiftfox.com/builds/installer/pentium4/install-swiftfox.sh -d /tmp 
$ vi /tmp/ install-swiftfox.sh  (作出适当的修正,不作修正也可) 
$ sudo sh /tmp/install-swiftfox.sh
也可以选择其他的网络浏览器,比如 Opera:
# pacman -S opera
* 4.3 图像编辑
(1) Linux下的Photoshop: GIMP,要安装它可以执行命令:
# pacman -S gimp
你可以通过”应用程序 → 图像 → GIMP“来运行 GIMP。
(2)矢量图形编辑软件可以使用 Inkscape:
# pacman -S inkscape
(3)命令行的可以装上 ImageMagick:
# pacman -S imagemagick
(4)用来捕获图像的 Scrot:
# pacman -S scrot
(5)轻量级的图像查看软件 GQview:
pacman -S gqview
或者 GNOME 默认的 Eog:
pacman -S eog
* 4.4 Linux下的Office软件
(1) OpenOffice.org :
# pacman -S openoffice-base openoffice-zh_cn
为了让 OpenOffice.org 运行于 GTK 2 模式,向SHELL的配置文件(如 ~/.bashrc) 添加:
export OOO_FORCE_DESKTOP=gnome
(2) 永中Office:
国产软件,听说对MS Office文档格式的支持要比OpenOffice好,如果Word,Exel的文件较多,
可以考虑这个,就是安装略显麻烦。
$ cd ~
$ aria2c -s 4 http://218.90.147.70/EverMore/EIOffice2007/EIO2007_Trial_ZH_Lin.tar.gz  (电信)or:
$ aria2c -s 4 http://218.104.51.66/EverMore/EIOffice2007/EIO2007_Trial_ZH_Lin.tar.gz   (网通)
$ tar zxf EIO2007_Trial_ZH_Lin.tar.gz
用su命令登录root,再进入解压后文件夹(好像是4开头的);
# ./setup.sh        (进入永中Office的图形界面安装,指定一下安装目录)
安装完成后,要以root身份运行一下永中:
# eio; exit
$ cd ~ ; seteio     (为普通用户配置下永中)
$ eio               (从终端运行永中Office,或者从菜单中运行也可以)
* 4.5 即时通讯
要与朋友即时聊天,我们可以选用 Pidgin,它支持 Gtalk、MSN、QQ 等多种协议:
pacman -S pidgin
当然,Skype 也不可错过:
pacman -S skype-staticqt
* 4.6 音影播放
(1)音乐播放软件我选择 Quod Libet,你可以凭自己的喜好来安装:
# pacman -S quodlibet
其他的音乐播放器有 MPD、Audacious、Exaile、Amarok 等。
(2)看电影的话,可用mplayer,同时也加上浏览器插件和常用解码器:
# pacman -S mplayer mplayer-plugin codecs gstreamer0.10-bad gstreamer0.10-ugly gstreamer0.10-ffmpeg gstreamer0.10-mad gstreamer0.10-mpeg2dec
如果需要 MPlayer 的前端,那么可以安装 SMPlayer:
# pacman -S smplayer
当然,另一个选择 VLC 也挺好:
# pacman -S vlc
* 4.7 下载工具
命令行下载工具,有 wget。此外,aria2 也不错,它支持断点续传和多线程下载:
pacman -S aria2
BitTorrent 下载工具,我们选用 Deluge:
pacman -S deluge
其他的包括 Azureus、rTorrent 等。
另外,我们把 aMule 也安装上:
pacman -S amule
为了能够让 aMule 直接从 Firefox 浏览器中处理 ed2k 链接,我们在 Firefox 的 
about:config 中新建字符串 network.protocol-handler.app.ed2k,并将其设为 
/usr/bin/ed2k。
* 4.8 文本编辑与排版
(1)如果要求简单的话,可以选用 Gedit:
pacman -S gedit
(2)安装 Vim,要图形界面的话,可以加上 Gvim:
pacman -S vim gvim
(3)Emacs 迷们可以执行:
pacman -S emacs
Emacs CVS 版本可在 community 中找到。
(4)世界第一流的排版工具集 TexLive
参看http://wiki.archlinux.org/index.php/Texlive
也可额外安装 TeX 的集成编辑环境:Kile, or Lyx
* 4.9 安装VirtualBox虚拟机
$ sudo tupac -S virtualbox_bin   (从AUR安装VirtualBox 的PUEL版本)
$ sudo vbox_build_module  (创建VirtualBox的内核)
$ sudo gpasswd -a YourName vboxusers  (将你的名字加入vboxusers用户组)
$ sudo modprobe  vboxdrv  (如果要立刻开始用,需要加载vboxdrv模块)
$ sudo vim /etc/rc.conf:
MODULES中加入vboxdrv,使开机时加载vboxdrv模块.
$ VirtalBox   (从终端运行virtualbox,或从桌面的菜单中运行它)
有时,会因为没有libstdc++5 这个库文件,而使virtualbox不能运行。安装它就是了:
$ sudo pacman -S libstdc++5
* 4.10 wine──在Unix/Linux系统上实现Windows API  
Wine用Unix的方式实现(或代替了)Windows API ,所以通过Wine可以在Unix-Like系统上运行 Windows 程序及游戏。
Wine-Doors是一款基于Gnome桌面的Windows软件安装管理包,是Wine 的辅助工具,
使用非常方便,只需在软件列表中选择要安装的软件,Wine-Doors就会帮你搞定一切,
不再需要自己动手来配置Wine。什么Office 2003,Photoshop都不在话下了。
$ sudo tupac -S wine wine-doors
$ winecfg        (配置好Wine)
$ sudo wine iexplore http://www.winehq.org  (安装Wine Gecko IE engine)
$  cp /usr/share/fonts/wenquanyi/wqy-zenhei/wqy-zenhei.ttf ~/.wine/drive_c/windows/fonts
给Wine提供一个中文字体:WenQuanYi Zen Hei
$ vi ~/zh.reg, add:      (编辑Wine中文字体支持的注册表文件,否则中文网页会乱码)
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Arial"="WenQuanYi Zen Hei"
"Arial CE,238"="WenQuanYi Zen Hei"
"Arial CYR,204"="WenQuanYi Zen Hei"
"Arial Greek,161"="WenQuanYi Zen Hei"
"Arial TUR,162"="WenQuanYi Zen Hei"
"Courier New"="WenQuanYi Zen Hei"
"Courier New CE,238"="WenQuanYi Zen Hei"
"Courier New CYR,204"="WenQuanYi Zen Hei"
"Courier New Greek,161"="WenQuanYi Zen Hei"
"Courier New TUR,162"="WenQuanYi Zen Hei"
"FixedSys"="WenQuanYi Zen Hei"
"Helv"="WenQuanYi Zen Hei"
"Helvetica"="WenQuanYi Zen Hei"
"MS Sans Serif"="WenQuanYi Zen Hei"
"MS Shell Dlg"="WenQuanYi Zen Hei"
"MS Shell Dlg 2"="WenQuanYi Zen Hei"
"System"="WenQuanYi Zen Hei"
"Tahoma"="WenQuanYi Zen Hei"
"Times"="WenQuanYi Zen Hei"
"Times New Roman CE,238"="WenQuanYi Zen Hei"
"Times New Roman CYR,204"="WenQuanYi Zen Hei"
"Times New Roman Greek,161"="WenQuanYi Zen Hei"
"Times New Roman TUR,162"="WenQuanYi Zen Hei"
"Tms Rmn"="WenQuanYi Zen Hei"
$ regedit zh.reg    (将中文字体配置写入Wine的注册表)
$ wine iexplore http://www.126.com     (试验一下中文效果)
需要注意的是,如果从abs系统编译了并升级安装到了最新的Wine,一定要运行“wineprefixcreate” 来更新Wine的注册表。
* 4.11  其他工具
(1)光盘刻录
KDE下建议选择 K3b,可以通过以下指令安装:
pacman -S k3b dvd+rw-tools
为了让当前用户能够使用光盘刻录设备,需要将其添加到 optical 用户组中:
gpasswd -a YOURNAME optical
如果是Gnome用户,建议安装gnomebaker,不亚于k3b:
pacman -S gnomebaker
(2) FTP上传
可选择命令行的 Lftp:
pacman -S lftp
图形化的有 gFTP、FileZilla 等。
FTP下载其实不必特意安装什么,因为wget,aria2都是支持FTP协议的。
(3)文档查看
查看 PDF 文档,可以安装 Evince:pacman -S evince
也可以用Adobe公司的acroread:pacman -S acroread
或轻量级的xpdf:pacman -S xpdf xpdf-chinese-simplified xpdf-chinese-traditional
CHM 文档,可以选用kchmviewer
(4)新闻阅读
RSS 离线阅读软件,用 Liferea:
pacman -S liferea
(5)邮件收发
电子邮件客户端,可以选择 Thunderbird:
pacman -S thunderbird thunderbird-i18n
或者采用:mutt + msmtp + getmail
(6)图形界面的进程查看器 (gps)
$ sudo pacman –S gps 
$ gps 
如果是文字界面的话,可用下面的命令: 
$ ps ax
(7)计算器:
pacman -S gcalctool
(8)压缩/解压 rar、zip 等格式:
pacman -S p7zip q7z    (安装7zip,q7z是其GUI程序)
pacman -S unrar unzip
另外,图形化的可以用 File-roller:
pacman -S file-roller
(9)词典翻译
安装 StarDict:
pacman -S stardict
同时,词典文件需从 StarDict 官方网站下载,并释放到 /usr/share/stardict/dic/ 目录。
(10)Java 支持:
pacman -S jre
(11)Flash 插件:
pacman -S flashplugin
* 4.11 安装主题
GDM 可以安装 Arch Boomerang Underlight 这套清爽的主题。下载后,执行:
$ tar zxvf arch-boomerang-underlight-gdm.tar.gz
$ mv arch-underlight-* /usr/share/gdm/themes/
$ sudo gdmsetup   (需要在X下执行,需要事先安装gdm)
或者,如果在使用Gnome,就在”系统 → 系统管理 → 登录窗口“中将样式更改为主题模式,
并选择已安装的主题即可。
参看:http://www.gnome-look.org/
还可以打造一个 Mac OS X 风格的界面,参看:http://sourceforge.net/projects/mac4lin
5  常见问题
* 5.1 声音问题
安装ALSA。实际上,ALSA 已被包含到 2.6 版的内核中。因此,只需安装 ALSA 的相关工具即可:
pacman -S alsa-utils
接着,将当前用户添加到 audio 用户组,以便使用声卡设备:
gpasswd -a YOURNAME audio
同时,将 alsa 添加到 /etc/rc.conf 配置文件的 DAEMONS 中:
DAEMONS=(syslog-ng network netfs crond gdm alsa)
值得注意的是,ALSA 默认是静音状态,需要先打开音量。另外,也可点击”系统 → 首选
项 → 音效“进行测试。
$ sudo pacman -S alsa-lib alsa-oss alsa-utils (oss 包解决声卡独占问题) 
$ sudo alsaconf   (设置声卡) 
$ sudo alsamixer 
$ sudo alsactl store  (设置和保存音量,并在 /etc/rc.conf中的 DAEMONS行加入alsa) 
$ amixer set Master 75 unmute 
$ amixer set PCM 75 unmute  (75 好像是原声,再高的话,声音会失真)
* 5.2 笔记本电脑可能遇到的问题
(1) 触摸板问题
参看http://wiki.archlinux.org/index.php/Touchpad_Synaptics
(2) 摄像头问题
参看http://wiki.archlinux.org/index.php/Webcam_Setup
(3) 无线上网问题
参看http://wiki.archlinux.org/index.php/Wireless
(4) 快捷键问题
参看http://wiki.archlinux.org/index.php/Extra_Keyboard_Keys
* 5.3 打印机设置
(1) 当前最流行的底层基础打印系统:CUPS  (适用于所有打印机)
Unix-Like系统下的打印系统中,最具易用性的当数CUPS (The Common UNIX Printing System ),即
Unix通用打印系统。在过去,Unix-Like系统下的打印问题是老大难。CUPS的出现使这个问题得到了
极大的缓解。
安装:
# pacman -S cups ghostscript gsfonts
CUPS系统运行记录:
编辑/etc/cups/cupsd.conf,设置LogLevel的等级:
LogLevel debug2
如果出现错误,就可以察看调试信息了:
$ tail -n 100 -f /var/log/cups/error_log
看看系统已经加载了哪些模组(Modules):
# lsmode |less
再来看看系统中有哪些可以使用的模组:
# modprobe -l |less
为内核加载打印机模组后,连接好打印机机,并打开电源:
i) USB 接口打印机
# modprobe usblp                      (2.6.x 内核)
# modprobe printer                    (2.4.x 内核)
# tail /var/log/messages.log          (看看安装成功了没有)
ii) 并口打印机
# modprobe lp parport parport_pc      (2.6.x 内核)
# modprobe parport parport_pc         (2.4.x 内核)
# tail /var/log/messages.log          (看看安装成功了没有)
将这些模组加入/etc/rc.conf中的MODULES中去,以便开机时自动加载。
启动 CUPS :
# /etc/rc.d/cups start       (可将cups加入/etc/rc.conf中的DAEMONS中去,以便开机时自动加载)
这个时候,就可以用CUPS在控制台下做一些简单的打印了,如:
$ cat ~/.xinitrc > /dev/usb/lp0      (USB接口打印机)
当然仅仅依靠CUPS打印,如果在X下,肯定是不方便的。主要是因为缺少驱动,Linux下的打印驱动是PPD文件。
(2) 打印驱动: Foomatic
Foomatic是一个数据库驱动的打印系统,它将Unix下的通用后台打印系统与开源的打印机驱动整合在一起。
只要有任一在开源驱动下能够正常工作的打印机,它就能支持了。它支持CUPS, LPRng, LPD, GNUlpr, Solaris LP,
PPR, PDQ, CPS 这些底层的打印系统,也能直接打印(既是驱动也是打印工具)。
Foomatic打印速度快,打印质量也挺不错。不过缺点是,有个别的打印机可能没有PPD文件驱动。
# pacman -S foomatic-***
Foomatic包含五个安装包:
foomatic-filters (帮助后台打印系统将PostScript转成打印机语言),
foomatic-db (foomatic-db-engine生成PPD文件时要用到的一切资料),
foomatic-db-PPD (已经获支持的打印驱动)
foomatic-db-engine (将 Foomatic XMLo数据库中的数据生成PPD文件),
foomatic-db-hpijs (专为HP打印驱动生成Foomatic XML 数据)。
一般来说,安装前四个包就可以了。如果没有惠普打印机,就不必安装foomatic-db-hpijs了。
(4) 打印驱动:hplip
惠普DeskJet, OfficeJet, Photosmart, Business Inkjet 和一些 LaserJet 打印机型号,需要安装hplip。只用于惠普打印机。
也可同时安装上面的Foomatic,对比一下两者的打印速度。
# pacman -S hplip
(5) 打印驱动:Gutenprint
也许以上的打印驱动仍然不行(不过安装foomatic一定是必要的,能提高打印速度)。在配置CUPS时(即将讲到)
没有找到自己的打印机型号。那么可能还需要接着安装Gutenprint。
Gutenprint 是GIMP的打印扩充功能模块,过去叫"gimp-print",它能够为GIMP提供流行的打印驱动,能
让佳能、爱普生、惠普、利盟、索尼、奥林巴斯,以及其他基于PCL技术的打印机,打印出更出色的品质。用于高品质的图像打印是在好不过了。
它支持的打印机型号列表可见于:http://gutenprint.sourceforge.net/p_Supported_Printers.php3
不过Gutenprint的打印品质是没得说,但速度就不敢恭维了。但有foomatic的支持就会快很多。
# pacman -S gutenprint
(6)  在X下配置CUPS
打印基础系统CUPS和打印驱动安装好的,就要开始配置打印机了。
可以通过配置CUPS来配置打印机。配置CUPS的方法适用于一切打印机及其驱动。因此推荐使用。
进入X,打开一个网络浏览器,访问:
http://localhost:631      (也可以用在/etc/hosts中设置好的hostname来代替localhost)
按照提示,一步一步的配置好打印机:
Manage Printers ---> Add Printer ---> root密码验证 ---> 输入打印机名称 ---> 选择设备类型
(打印机型号及其接口:USB接口 or 并口打印机) ---> 选择你的打印机 ---> 通过打印机型号来选择适当的打印机驱动,并Add
(如果打印驱动的名称中出现了foomatic字样,一定要优先选择) ---> 打印选项的设置 ---> 完成
也可以使用另外的配置界面,不过可能要另外安装:
tupac -S gnome-cups-manager     (Gnome下)
tupac -S gtklp                  (KDE下)
(5) 打印机共享
i) Linux to Linux
服务器端:编辑 /etc/cups/cupsd.conf 中“Location”一段,以允许客户端的访问,重启cups服务。
客户端:编辑 /etc/cups/cupsd.conf 中“ServerName”一段,以允许访问服务器端。执行命令:lpq
ii) Linux to Windows
两端都应当安装Samba。参看Wiki。
iii) Windows to Linux
两端都应当安装Samba。参看Wiki
*******
所有关于打印的问题,请一定要参看:
http://wiki.archlinux.org/index.php/CUPS
http://www.cups.org/
http://gimp-print.sourceforge.net/
http://www.linuxprinting.org/printer_list.cgi
http://www.linux-foundation.org/en/OpenPrinting/Database/Foomatic
http://savannah.nongnu.org/projects/foomatic-gui/
http://wiki.gentoo.tw/mediawiki/index.php/Printing-howto
另可参看http://www.redhat.net.cn/online/linuxbook/1/16.htm
* 5.4 服务的访问控制
/etc/hosts.allow 和/etc/hosts.deny 
这两个文件是tcpd 服务器的配置文件,tcpd 服务器可以控制外部IP 对本机服务的访问。 
这两个配置文件的格式如下: 
#服务进程名:主机列表:当规则匹配时可选的命令操作 
server_name:hosts-list[:command] 
/etc/hosts.allow 控制可以访问本机的IP 地址,/etc/hosts.deny 控制禁止访问本机的IP。 
如果两个文件的配置有冲突,以/etc/hosts.deny 为准。下面是一个/etc/hosts.allow 的示例: 
ALL: 127.0.0.1: ALLOW     #允许本机访问本机所有服务进程 
smbd: 192.168.0.0/255.255.255.0   #允许192.168.0.网段的IP 访问smbd 服务 
ALL 关键字匹配所有情况,EXCEPT 匹配除了某些项之外的情况,PARANOID 匹配你想控 
制的IP 地址和它的域名不匹配时(域名伪装)的情况。
* 5.5 启动加速
编辑 /etc/rc.conf ,在 “ DAEMONS ”行的一些不急着需要用的后台程序前加上@,使后台运行。
* 5.6  中文Java 支持
$JAVA_HOME/jre/lib/fonts/  下建一个fallback 的目录,然后建一个中文字体的软链接过去。
* 5.7  可移动设备的自动挂载(HAL + dbus or ivman) 及中文名支持
$ sudo pacman -S hal dbus acpid(hal 依赖 dbus,acpid 可管理设备的电源。) 
$ sudo vi /etc/rc.conf ,在 DAEMONS行 加入hal,如: 
DAEMONS=(syslog-ng acpid hal network !netfs @crond @alsa gdm) 
注意:如果daemons 列表中有dbus,要移除它,以免出错。hal 会自动加载dbus。 
$ sudo gpasswd –a username optical 
$ sudo gpasswd –a username storage 
把你的用户加入到 optical,storage 这几个组里面。前文中已经加入过了,可跳过。
如果用ivman来替代dbus,则需要将用户名加入到plugdev组中。
$ sudo vi /etc/fstab,注释掉下面两行: 
/dev/cdrom /mnt/cdrom  iso9660 ro,user,noauto,unhide 0     0 
/dev/dvd /mnt/dvd   udf  ro,user,noauto,unhide 0      0 
$ sudo vi /etc/hal/fdi/policy/preferences.fdi,可加入一些很有用的规则,
如自动挂载NTFS文件系统,自动挂载可移动设备,性能优化,U盘的中文名支持等:
<?xml version="1.0" encoding="UTF-8"?> 
<deviceinfo version="0.2">
    <device>
        <match key="volume.fstype" string="ntfs">
            <append key="volume.mount.valid_options" 
            type="strlist">dmask=000</append>
            <append key="volume.mount.valid_options" 
            type="strlist">fmask=111</append>
        </match>
    </device>
    <device>
    <!-- Use UTF-8 charset for vfat -->
       <match key="volume.fstype" string="vfat">
           <merge key="volume.policy.mount_option.iocharset=utf8" 
           type="bool">true</merge>
       </match>
   </device>
   <device>
       <match key="storage.hotpluggable" bool="false">
          <match key="storage.removable" bool="false">
            <merge key="storage.automount_enabled_hint" type="bool">false</merge>
          </match>
       </match>
   </device>
 <device> 
   <match key="block.is_volume" bool="true">
     <match key="volume.size" compare_lt="8000000000">
       <match key="@block.storage_device:storage.hotpluggable" bool="true">
         <merge key="volume.policy.mount_option.sync" type="bool">true</merge>
         <merge key="volume.policy.mount_option.noatime" 
         type="bool">true</merge>
        </match>
        <match key="@block.storage_device:storage.removable" bool="true">
         <merge key="volume.policy.mount_option.sync" type="bool">true</merge>
         <merge key="volume.policy.mount_option.noatime" 
          type="bool">true</merge>
        </match>
      </match>
     <match key="volume.size" compare_ge="8000000000">
       <match key="@block.storage_device:storage.hotpluggable" bool="true">
         <merge key="volume.policy.mount_option.sync" 
          type="bool">false</merge>
         <merge key="volume.policy.mount_option.noatime" 
         type="bool">false</merge>
       </match>
       <match key="@block.storage_device:storage.removable" bool="true">
         <merge key="volume.policy.mount_option.sync" 
          type="bool">false</merge>
         <merge key="volume.policy.mount_option.noatime" 
         type="bool">false</merge>
       </match>
     </match>
   </match>
 </device>
</deviceinfo>
参看:http://wiki.archlinux.org/index.php/HAL
注意,必须事先安装好ntfs-3g安装包,才能成功挂载NTFS分区。最后:
$ sudo /etc/rc.d/hal restart
即可正常使用HAL支持了,同时移动设备上的中文名(其实其它语言也可以)也可以得到支持。
如果以上不能工作,还可以安装pmount: 
$ sudo pacman -Sy pmount
* 5.8 更改GNOME 菜单下的图标
可以编辑/usr/share/applications 中的相应文件
* 5.9 ArchLinux的包管理系统:Pacman
常用命令有:
pacman -Sy  abc                  #和源同步后安装名为abc的包 
pacman -S   abc                  #从本地数据库中得到abc的信息,下载安装abc包 
pacman -Sf  abc                  #强制安装包abc 
pacman -Ss  abc                  #搜索有关abc信息的包 
pacman -Si  abc                  #从数据库中搜索包abc的信息 
pacman -Qi  abc                  #列出已安装的包abc的详细信息 
pacman -Syu                      #同步源,并更新系统 
pacman -Sy                       #仅同步源 
pacman -R   abc                  #删除abc包 
pacman -Rc  abc                  #删除abc包和依赖abc的包 
pacman -Rsc abc                  #删除abc包和abc依赖的包 
pacman -Sc                       #清理/var/cache/pacman/pkg目录下的旧包 
pacman -Scc                      #清除所有下载的包和数据库 
pacman -U   abc                  #安装下载的abs包,或新编译的abc包
pacman -Sd  abc                  #忽略依赖性问题,安装包abc 
pacman pacman -Su --ignore foo   #升级时不升级包foo 
pacman -Sg  abc                  #查询abc这个包组包含的软件包
* 5.10 Arch Build System (ABS)
利用abs 可以从源码自定义编译安装包。其过程如下: 
(1) Synchronize your ABS tree with the server. 
# pacman -S cvsup 
# abs
(2) Create a new directory in /var/abs/local/ named after the package 
you are going to create. 
$ mkdir -p ~/abs/local/       (这里,推荐在个人的主目录下创建一个ABS的工作目录)
(3)Copy the PKGBUILD.proto prototype from /var/abs/ into your 
newly created directory, remove the .proto suffix, and edit it to fit 
the new package. 
$ cp -r /var/abs/...  ~/abs/local/    (将你要编译的软件的PKGBUILD目录复制到个人目录下)
(4) Run makepkg in the working directory with the PKGBUILD file. 
$ makepkg        (开始编译这前,可以编辑一下PKGBUILD文件,更改其默认安装目录到个人
主目录下,用“--prefix=...”来指定安装目录)
(5) Install the newly built package with pacman.
$ pacman -U ..pkg.gz    (安装新编译好的包文件)
(6) Send the package to your friends for bragging rights (or give it to an Archer 
so s/he can stick it in the master ABS tree).
* 5.11  创建一个光盘镜像
Linux 下创建一个光盘镜像真的很简单,基本上有两类方法:
(1) 镜像的源文件在光盘上
将光盘放入光驱,但不用 mount 指令加载它,然后:
dd if=/dev/dvd of=dvd.iso # for dvd 
dd if=/dev/cdrom of=cd.iso # for cdrom 
dd if=/dev/scd0 of=cd.iso # if cdrom is scsi 
(2) 镜像的源文件在硬盘上或被 mount 到了硬盘上,比如在 /tmp/directory/:
mkisofs -o cd.iso /tmp/directory/ 
如果这个源文件是一个DVD视频文件,那么要这样用:
mkisofs -dvd-video -o dvd.iso /tmp/directory/
关于mkisofs 的更多用法,还请参看手册:man mkisofs
关于DVD视频光盘的编辑和创建,请参看:
http://gecius.de/linux/dvd.html
http://gentoo-wiki.com/HOWTO_Create_a_DVD:Filesystem
6 服务器环境
* 6.1 FTP服务
(1) vsftpd
FTP服务器的安装比较简单。直接用Pacman安装即可。当然,还必须配置好,才可正常安全的使用。
vsftpd的使用和配置,可参考:
http://vsftpd.beasts.org/
http://gentoo-wiki.com/HOWTO_vsftpd
http://www.uplinux.com/www/net/02/117.shtml
(2) pureftpd
参考http://www.pureftpd.org/project/pure-ftpd
    http://www.chinaunix.net/jh/15/2424.html
* 6.2 HTTP服务
(1) 提供Web服务的程序
能提供WEB服务的开源程序主要有:Apache httpd, Lighttpd, 和Nginx。
Apache稳定,安全,使用者最多,但是运行时对内存、CPU的开销也是最高的。
在静态网页支持上,lighttpd/nginx 比 apache 优胜很多。
如果不考虑虚拟主机的安全设置问题,Nginx无疑是最好的选择,其次是Lighttpd。
i) Apache httpd: 参见http://httpd.apache.org/
ii) Lighttpd: 参见http://wiki.archlinux.org/index.php/Lighttpd_For_Both_SSL_And_Non-SSL
iii) Nginx: 参见http://wiki.codemongers.com/Main
(2) 动态网页的程序接口(CGI):FastCGI:
是HTTP服务器与机器上其他程序进行通信的一个接口。这个“其他程序”可以使用任何计算机语言
来编写,它通过CGI这个接口从HTTP服务器取得输入,然后把运行的结果又通过CGI这个接口交给HTTP
服务器,而HTTP服务器把这个结果送给浏览器。提供Web服务的程序都有CGI模块。
不过CGI技术的通用性与效率不高,所以有了性能大幅提升的FastCGI。FastCGI要求提供Web服务的
程序整合fcgi模块。
参见http://wiki.archlinux.org/index.php/Apache_fastcgi
    http://wiki.archlinux.org/index.php/Fastcgi_and_lighttpd
(3) 动态网页的脚本语言
PHP:参见http://wiki.archlinux.org/index.php/PHP
Python: 在动态网页上的应用与PHP相似。
JSP:Java语言支持,需安装JDK
(4) 数据库
MySQL:  当前国内用的较多的数据库。适合小访问量或个人使用。
PostgreSQL:  世界上最先进,最稳定的数据库。能充分发挥出机器的潜能。更加适合大企业环境。
参看http://wiki.archlinux.org/index.php/PostgreSQL
(5) HTTP服务器的架构
i) 不带数据库支持的轻量级WEB:Nginx/lighttpd + PHP/Python + FastCGI
ii) 有数据库支持:Apache/lighttpd + PHP/Python + MySQL/PostgreSQL,也可再追加JSP的支持。
参看http://wiki.archlinux.org/index.php/LAMP
参见http://wiki.archlinux.org/index.php/Apache_fastcgi
    http://wiki.archlinux.org/index.php/Fastcgi_and_lighttpd
    http://www.knowsky.com/3232.html
iii) 更加高效、可靠、稳定的WEB服务器。下面的架构图比较不错:
--------      ------------      -------------        ----------------        --------------
|客户端| ===> |负载均衡器| ===> |反向**/缓存| ===>   |WEB服务器|     ===>  |数据库服务器|
--------      ------------      -------------        ----------------        --------------
                  Nginx            Squid              Apache/lighttpd        MySQL/PostgreSQL
                                                      +(PHP+eAccelerator)     + memcache
参看http://huangjt.jobui.com/blog/80186.html
(6) 用WebDav替代传统的FTP服务
WebDav是一个使用XML技术的基于HTTP协议的扩展协议,具备HTTP的所有优点,力图提供
一个网页编辑的统一接口。用它替代传统的FTP服务,可以避免FTP存在的一些中文问题。
参看:http://wiki.archlinux.org/index.php/Simple_WebDav_Setup
      http://wiki.archlinux.org/index.php/WebDAV_authentication
* 6.3 邮件服务
PostFix:参看http://wiki.archlinux.org/index.php/PostFix_Howto
* 6.4 文件共享
文件共享的方法较多,机器上只要安装了任一网络文件系统就可以共享了。网络文件系统有:
ftpfs, sshfs, shfs, smbfs, nfs, etc. 
当然,使用http服务来共享文件也未尝不可。
(1) Shfs
sshfs可以开机自动挂载,关机和重启时也可以自动卸载sshfs文件系统,但是它不能用mount来
直接指定-t参数来挂载,因此也不能直接加到/etc/fstab中,而且用df也不能列出那样的分区。
但是shfs解决了这个问题,它能像挂载普通分区那样挂载sshfs文件系统。它是通过内核的shfs
模块来实现的,
参看http://wiki.archlinux.org/index.php/Shfs
(2) Samba
可帮助实现跨平台(Linux <--->Windows) 的文件共享和打印共享。
参看http://wiki.archlinux.org/index.php/Setting_up_Samba
    http://www.samba.org/
(3) NFS
参看http://wiki.archlinux.org/index.php/Nfs
(2) rsync
Rsync用于两台机器上文件的同步备份,它本身不算是共享程序,但它能起到共享的作用。通常与ssh合用。
参看http://samba.anu.edu.au/rsync/
    http://dz.adj.idv.tw/thread-48-1-4.html
* 6.5 远程登录
(1) OpenSSH/OpenSSH-chroot
用 OpenSSH-chroot 基于Openssh,但添加了新特性,即可以创建一个chrootjail。chrootjail是单独划分
出的一个空间,以限制远程登录者活动不超出此范围,更不会影响到主系统。所以比用 Openssh 更安全。
# pacman -S openssh-chroot
# mkdir /var/openssh_chroot
# chroot_create /var/openssh_chroot   (将chrootjail放到/var/openssh_chroot,或其它地方)
# chroot_adduser USERNAME /var/openssh_chroot  (创建远程登录者帐户,并为其指定chrootjail)
# /etc/rc.d/sshd restart  (手动重启sshd服务,也可将sshd添加到/etc/rc.conf中的DAEMON中去)
如果远程机器是Unix-Like系统,可用:ssh <username>@localhost 来登入;如果是Windows, 可使用
Putty, or pietty。
参看http://wiki.archlinux.org/index.php/Openssh-chroot
(2) OpenVPN
* 6.6 安全问题
(1) 防火墙 (Iptables)
这个实在不是几句话能讲明白的。不过想提醒几句:要使Iptables发挥出最大作用,最好是在一台
旧电脑装上NAT+Iptables,充当网关,然后自己的电脑跟此网关相连接。
参看:http://wiki.archlinux.org/index.php/Firewalls
      http://wiki.archlinux.org/index.php/Simple_stateful_firewall_HOWTO
      http://gentoo-wiki.com/HOWTO_Iptables_for_newbies
      http://iptables-tutorial.frozentux.net/iptables-tutorial.html
      http://wiki.archlinux.org/index.php/High_Performance_Firewall/Nat_with_iptables_and_VLANs_and_iproute2
(2) 入侵监测 (Snort)
这个太复杂了。
有兴趣可以看一看Toby Kohlenberg等编写的专著"Snort: Intrusion Detection and Prevention Toolkit"。
电子书下载http://rapidshare.com/files/27449819/Snort_Intrusion_Detection_and_Prevention_Toolkit_ertu.rar
参看http://www.snort.org/

archlinux-支持iphone插线3G

点击量:3

度娘永远都不会告诉你真正的答案是什么。

因为没有了CMCC-EDU,用上了坑爹联通,所以现在习惯于手机USB上网了。。(博主套餐流量看个技术是可以的。。)

然后问题就来了。。CentOS7上可以安稳的使用3G但是arch似乎不支持,百度了好久也没有找到。

后来bing 了一下iphone arch linux神奇的wiki就出来了,随后就申请了个帐号,准备在学习Linux的过程中学习英语。给wiki
做点翻译还是可以的吧= =。

方法很简单, 因为我用的是NetworkManager, 所以最简单而行之有效的方法是:

pacman -S libimobiledevice
pacman -S usbmuxd  ifuse

重启机器或者NetworkManager搞定。

虽然无关技术以及学术痛痒,但是总感觉在Linux普及上尽了一份力= =

archlinux-安装笔记

点击量:3

花了一些时间安装arch,记录一下注意事项。

多重引导

  • 安装多重引导支持
    pacman -S os-prober
  • 更新grub
    grub-mkconfig -o /boot/grub/grub.cfg
  • 写入mbr
    grub-install --target=i386-pc --recheck /dev/sda

图形化的网络服务

systemctl enable NetWorkManager.service

wifi配置

  • 如果你想使用wifi(在图形界面下),首先你要停止dhcp服务systemctl stop dhcpcd.service
  • 开机停止运行systemctl disable dhcpcd.service
  • 我们之所以这样,是为了保证我们的NetWorkManager正常服务。

session控制器

我选择的是gdm,原因是slim我不太会配置。
pacman -S gdm

另外patheon在我书写这篇blog的时候,还是存在不少bug.官方的wiki在这个时候也不是很好用了。期待patheon!

添加了官方给的patheon库,会出现一个gnome-lib的冲突

输入法的注意事项

使用fcitx需要注意.xprofile的配置问题。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

其他的安装情况可以看看官方的wiki

sudoer的配置

使用pacman安装sudoer

pacman -S sudo

编辑/etc/sudoers,取消wheel用户组的注释.

vim配置

gvim中,直接使用synatic on而不用判断,否则会造成代码高亮失效。

locate配置

安装以后发现locate命令无法使用,安装pacman -S mlocate

另外, mark一个项目:gitbook, 很好很强大

应该涵盖了所有的我安装时候遇到的问题,如果还有什么问题,我再后续添加。

Linux-进程间的通信

点击量:3

实验内容

消息的创建,发送,和接收。

<任务>

使用系统调用 msgget( ), megsnd( ), msgrev( )及 msgctl()编制一长度为 1K 的消息发送和接收的程序 。

程序设计

  1. 为了便于操作和观察结, 用一个程序为引子 , 先后fork( )两个子进程 , SERVER 和 CLIENT,进行通信。
  2. SERVER 端建立一个 Key 为 75 的消息队列,等待其他进程发来的消息。当遇到类型为 1 的消息,
    则作为结束信号,取消该队列,并退出 SERVER 。SERVER 每接收到一个消息后显示一句 “(server)received”。
  3. CLIENT 端使用 Key 为 75 的消息队列,先后发送类型从 10 到 1 的消息,然后退出。最后的一个
    消息,既是 SERVER 端需要的结束信号。CLIENT 每发送一条消息后显示一句“(client)sent”。
  4. 父进程在 SERVER 和 CLIENT 均退出后结束。

使用的函数

并非每次创建消息队列都会成功,所以重新添加-1情况的判断。
可以使用ipcs -q命令查看

源代码

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#define MSGKEY 75
struct msgform
{
    long mtype;
    char mtexe[100];
}msg;
int msgqid, i;
void CLIENT()
{
    int i;
    msgqid = msgget(MSGKEY, 0777|IPC_CREAT);
    if( msgqid == -1)
    {
        puts("client error in build");
        return;
    }
    else
        printf("client qid is: %d\n", msgqid);
    for (i = 10; i >= 1; i --)
    {
        msg.mtype = i;
        printf("(client)sent mtype %ld.\n", msg.mtype);
        msgsnd(msgqid, &msg, strlen(msg.mtexe)+1, 0);
    }
    puts("client exit...");
    exit(0);
}
void SERVER()
{
    msgqid = msgget(MSGKEY, 0777|IPC_CREAT);
    if( msgqid == -1)
    {
        printf("error in build.\n");
        return;
    }
    else
        printf("server qid is: %d\n", msgqid);
    do
    {
        msgrcv(msgqid, &msg, 1030, 0, 0);
        printf("(server)received mtype %ld.\n", msg.mtype);
    } while (msg.mtype != 1);
    msgctl(msgqid, IPC_RMID, 0);
    puts("server exit...");
}
int main ()
{
    if(fork())
    {
        SERVER();
        wait(0);
    }
    else
        CLIENT();
    return 0;
}

运行结果

进程间的通信

Linux-同步互斥

点击量:5

使用pthread实现经典问题:生产者消费者

关于semaphore的相关信息就不再贴出来了。

编译的时候记得-pthread选项。

/*=============================================================================
#
# Author: svtter - svtter@qq.com
#
# QQ : 57180160
#
# Last modified: 2014-10-03 20:35
#
# Filename: producer_consumer.cc
#
# Description: 
#
=============================================================================*/
#include <cstdio>
#include <unistd.h>
#include <semaphore.h>
#include <pthread.h>
#include <sys/types.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define N 5
#define item int
// P/V操作
void P(sem_t* sem)
{
    if(sem_wait(sem))
        perror("P error!");
}
void V(sem_t* sem)
{
    if(sem_post(sem))
        perror("V error!");
}
sem_t mutex;
sem_t full;
sem_t empty;
item buffer[N];
int i = 0, j = -1;
void init_sem()
{
    sem_init(&mutex, 0, 1);
    sem_init(&full, 0, 0);
    sem_init(&empty, 0, N);
}
void* producer(void *arg)
{
    int product;
    while(1)
    {
        //生成随机数字
        product = rand()%100;
        // cout << "producer running..." << endl;
        P(&empty);
        P(&mutex);
        buffer[i] = product;
        printf("producer produced %d @ %d pos\n",
                product, i);
        i=(i+1)%N;
        V(&mutex);
        V(&full);
        sleep(1);
    }
}
void* consumer(void *arg)
{
    int product, temp;
    while(1)
    {
        // cout << "consumer running..." << endl;
        P(&full);
        P(&mutex);
        j = (j+1)%N;
        product = buffer[j];
        V(&mutex);
        V(&empty);
        printf("Consumer consumed %d @ %d pos\n",
                product, j);
        sleep(3);
    }
}
int main()
{
    //random num
    srand(time(NULL));
    init_sem();
    int error;
    pthread_t producer_t, consumer_t;
    error = pthread_create(&producer_t, NULL, producer, NULL);
    if(error != 0)
        printf("error in create producer.\n");
    else
        printf("create producer success!\n");
    pthread_create(&consumer_t, NULL, consumer, NULL);
    if(error != 0)
        printf("error in create consumer.\n");
    else
        printf("create consumer success!\n");
    pthread_join(producer_t, NULL);
    pthread_join(consumer_t, NULL);
    return 0;
}

运行结果

生产者消费者

操作系统经典问题:哲学家就餐问题

mutex是c++11的新功能。记得添加C++11支持。(在运行结果中包含编译选项。)

#include <iostream>
#include <mutex>
#include <cstdio>
#include <thread>
#include <semaphore.h>
using namespace std;
#define THINK(i) printf("ph[%d] is thinking...\n", i)
#define EAT(i) printf("ph[%d] eats.\n", i)
void P(mutex &mt)
{
    mt.lock();
}
void V(mutex &mt)
{
    mt.unlock();
}
void P(sem_t* sem)
{
    if(sem_wait(sem))
        perror("P error!");
}
void V(sem_t* sem)
{
    if(sem_post(sem))
        perror("V error!");
}
// 加入unistd.h出现问题,似乎与thread的兼容性比较差,于是重写
void delay()
{
    int sum=0;
    for(int i = 0; i < 10000000; i++)
        sum += i;
}
mutex fork[5];
sem_t room;
void init()
{
    sem_init(&room, 0, 4);
}
void philosopher (int i)
{
    for(int j = 0; j < 5; j++)
    {
        THINK(i);
        P(&room);
        P(fork[i]);
        P(fork[(i+1)%5]);
        EAT(i);
        V(&room);
        V(fork[i]);
        V(fork[(i+1)%5]);
    }
}
int main()
{
    init();
    thread t[] = {
        thread(philosopher, 0),
        thread(philosopher, 1),
        thread(philosopher, 2),
        thread(philosopher, 3),
        thread(philosopher, 4),
    };
    for(int k = 0; k < 5; k++)
        t[k].join();
    return 0;
}

运行结果

哲学家就餐

操作系统经典问题:读者写者问题

读者优先

  • 使用了c++11的新特性thread
#include <iostream>
#include <mutex>
#include <thread>
using namespace std;
mutex mt, wsem;
int readcount = 0;
#define READ(a) cout << a << " is reading..." << endl;
#define FINISH(a) cout << a << " finished reading." << endl;
#define WRITE cout << "writing..." << endl;
void P(mutex &mt)
{
    mt.lock();
}
void V(mutex &mt)
{
    mt.unlock();
}
// 加入unistd.h出现问题,似乎与thread的兼容性比较差,于是重写
void delay()
{
    int sum=0;
    for(int i = 0; i < 10000000; i++)
        sum += i
}
void read(string a)
{
    for(int i = 0; i < 3; i++)
    {
        P(mt);
        readcount++;
        if(readcount == 1)
            P(wsem);
        V(mt);
        READ(a);
        delay();
        P(mt);
        readcount--;
        FINISH(a);
        if(readcount == 0)
            V(wsem);
        V(mt);
    }
}
void write()
{
    for(int i = 0; i < 5; i++)
    {
        P(wsem);
        WRITE;
        delay();
        V(wsem);
    }
}
int main()
{
    thread reader1(read, "svtter");
    thread reader2(read, "sr");
    thread reader3(read, "yym");
    thread reader4(read, "xiaoniu");
    thread writer(write);
    reader1.join();
    reader2.join();
    reader3.join();
    reader4.join();
    writer.join();
    return 0;
}

运行结果

由于可以同时阅读,所以读者reading输出可能出现少许问题。

运行结果

写者优先


  • 使rsem中只有一个读者在等待,保证了如果有写者,写者优先写
#include <iostream>
#include <mutex>
#include <thread>
using namespace std;
#define READ(a,i) cout << a << i<<" is reading..." << endl;
#define FINR(a,i) cout << a << i<<" finished reading." << endl;
#define WRITE(a,i) cout << a <<i<<" is writing..." << endl;
#define FINW(a, i) cout << a <<i<<" finished writing..." << endl;
void P(mutex &mt)
{
    mt.lock();
}
void V(mutex &mt)
{
    mt.unlock();
}
// 加入unistd.h出现问题,似乎与thread的兼容性比较差,于是重写
void delay()
{
    int sum=0;
    for(int i = 0; i < 10000000; i++)
        sum += i;
}
mutex mr, wsem, rsem, mrc, mwc;
int readcount = 0;
int writecount = 0;
void read(string a)
{
    for(int i = 0; i < 5; i++)
    {
        P(mr);
        P(rsem);
        P(mrc);
        readcount++;
        if(readcount == 1)
            P(wsem);
        V(mrc);
        V(rsem);
        V(mr);
        READ(a, i);
        P(mrc);
        FINR(a, i);
        readcount--;
        if(readcount == 0)
            V(wsem);
        V(mrc);
    }
}
void write(string a)
{
    for(int i = 0; i < 3; i++)
    {
        P(mwc);
        writecount++;
        if(writecount == 1)
            P(rsem);
        V(mwc);
        P(wsem);
        WRITE(a, i);
        FINW(a, i);
        V(wsem);
        P(mwc);
        writecount--;
        if(writecount == 0)
            V(rsem);
        V(mwc);
    }
}
int main()
{
    thread reader1(read, "svtter");
    thread writer1(write, "sr");
    thread writer2(write, "zs");
    thread writer3(write, "yym");
    reader1.join();
    writer1.join();
    writer2.join();
    writer3.join();
    return 0;
}

运行结果

  • 基本上结果就是写者写完,才会有读者阅读

写者优先