GNU/Linux 在 Console 下的一些小技巧

26 views
Skip to first unread message

pnt

unread,
Dec 17, 2007, 11:42:02 PM12/17/07
to min...@googlegroups.com


 
 

Sent to you by pnt via Google Reader:

 
 

via 今天的 Tetralet 又在唧唧喳喳了 by Tetralet on 12/17/07

雖然現今 GNU/Linux 已經堂堂邁入了 3D 桌面的時代了,但對於 GNU/Linux 的使用者而言,文字介面卻仍是最基本最便利的操作介面。很多時候,像是無法進入 X Window System、安裝新系統、或是進行系統維護修復時,我們可能得在沒有 X 的環境下操作系統,這時若我們能事先讓 Console 的作業環境更加得親和將會有助於提昇工作效率。


修改預設的 Locale

在安裝好 Debian 之後,您的 Locale 參數很可能全被設定為 zh_TW.UTF-8,因此,您很可能會發 現很多指令的輸出結果都改以中文顯示了,這當然是眾多中文翻譯者的辛苦成果。但問題是若沒有加載一些特定軟體,在 Console 下這些中文將會以亂碼顯示,反而讓使用者難以操作系統。

解決方案之一,就是將系統的 Locale 參數重設為 "C"。請修改 /etc/environment/etc/default/locale 如下:

LANG="C"
LANGUAGE="C"
那麼,下次登入 Console 時,您的系統的 Locale 參數將會全被設定為 C,因而所有的指令的輸出將會是以英文顯示 了。
註: 大部份的軟體已改由 LANGUAGE 環境參數來決定輸出文字所會採用的語系。但還是有部份軟體參考的是 LC_* 環境參數,所以本例中才會同時將 LANG 設定為 C

讓 Console 也能顯示 UTF-8 文字

若您還是希望能在 Console 下也能看到中文字,這其實並不是不可能:使用 zhcon、jfbterm 或 cce 就可以讓 Linux 在 Console 下顯示 UTF-8 文字:

zhcon

若要使用 zhcon,請安裝 zhcon 套件,並編輯 /etc/zhcon.conf 以符合您的需求。例:

#defaultencode: default encoding can be :gb2312,gbk,big5,jis,ksc
defaultencode = big5

為了讓 zhcon 支援 UTF-8,請同時以以下參數啟用 zhcon:

zhcon --utf8

zhcon 包含了中文輸入法模組,但在 zh_TW.UTF-8 環境下並無法正確輸入。gdm 可以在 zhcon 上啟用,但卻無法選取中文字。zhcon 的原始碼中包含了一個修正此問題的 gdm,您可以試著編譯並和 zhcon 搭配使用。

zhcon 在顯示時只是單純得透過轉碼將 UTF-8 文字以 Big5 碼顯示,所以用 zhcon 時掉字漏字是屢見不鮮的。在 Linux 上,zhcon 也只能以 640x480 的解析度顯示,這些都是 zhcon 的致命缺點。

jfbterm(推薦使用)

jfbterm 則必須和 unifont 套件及 FrameBuffer 搭配使用,所以請同時安裝 unifont 套件並啟用 FrameBuffer(參見下文)

aptitude install jfbterm unifont

jfbterm 的優勢是它毋需什麼設定就能立刻使用。但 jfbterm 目前只能用於顯示 UTF-8 文字,並沒有內含輸入法模組;而更糟的是 gdm 在 jfbterm 下完全無法運作。但至少 jfbterm 在顯示 UTF-8 上並沒什麼大問題。

cce

另有一個 cce 套件(Debian 已無此套件)也可以用來顯示 UTF-8 文字。但個人試過並無法啟動,會 segment fault。

因此,目前在 Console 上尚無完善的 UTF-8 作業環境,所以若有處理 UTF-8 文字的必要,建議還是回到 X Window System 下用 X Terminal Emulator 吧!

改變 Console 的字型

預設上,Debian GNU/Linux 在開機時使用的是 BIOS 所提供的字型,但您可以利用 consolechars 指令來將 Console 的文字即時替換成使用其它字型。例:
consolechars -f /usr/share/consolefonts/ka8x16thin-1.psf.gz
如果您想讓您的系統在開機後固定採用某個字型,您可以修改 /etc/console-tools/config 如下:
SCREEN_FONT=ka8x16thin-1

其中的 ka8x16thin-1 為字型的名稱。而可用於 Console 下的 *.psf.gz 字型可於 /usr/share/consolefonts/ 下找到。

另外,您還可以安裝 console-setup 套件:
aptitude install console-setup
那麼下次開機時就會自動採用 console-setup 套件所提供的 Uni1-Fixed16 字型了。該字型極為美觀,建議採用。

改變 Console 的解析度

一般而言,Debian GNU/Linux 開完機後的螢幕解析度為 640x480。但現在的螢幕尺寸越做越大,若在 Console 下還是使用著 640x480 的解析度似乎並不合宜。

若要設定 Console 的解析度,請在開機時傳遞 vga 參數給 Kernel 以啟用 FrameBuffer,並藉由 FrameBuffer 來指定 Console 的解析度。以 GRUB 為例,請修改 /boot/grub/menu.lst 如下:

title           Debian GNU/Linux, kernel 2.6.22-3-vserver-k7
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-3-vserver-k7 root=/dev/sda1 ro vga=789
initrd          /boot/initrd.img-2.6.22-3-vserver-k7
savedefault

其中的 vga=789 就是要求 Linux 在開機時啟用 FrameBuffer,並將螢幕解析度設定為 800x600x24bit。而 789 這個數值可替換如下:
螢幕解析度 (X) | 320  640  640  800  800  896 1024 1024 1152 1552 1280 1440 1600
螢幕解析度 (Y) | 200  400  480  500  600  672  640  768  720  864 1024  900 1200
---------------+-----------------------------------------------------------------
 4 bits        |                     770            772            774
 8 bits        |      768  769  879  771  815  874  773  869  353  775  864  796
15 bits        | 781  801  784  880  787  816  875  790  870  354  793  865  797
16 bits (5:6:5)| 782  802  785  881  788  817  876  791  871  355  794  866  798
24 bits (8:8:8)| 783  803  786  882  789  818  877  792  872       795  867  799
32 bits (8:8:8)|      804  809  883  814  819  878  824  873  356  829  868  834

註:上表中的資料可能有誤謬。或有錯誤請不吝告知!

另外,在利用 aptitude 更新 Kernel 時,系統在自動建立 /boot/grub/menu.lst 時很可能並不會替您把那個 vga 參數放回去,您得在事後再自行編輯才行,而這的確不夠人性化。解決方案之一,是修改 /boot/grub/menu.lst 如下:
## DO NOT UNCOMMENT THEM, Just edit them to your needs

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=
vga=789
這樣下次更新 Kernel 時,系統就會自動替您加上 vga=789 參數了。
註: 一直有人謠傳說,要在 Debian 下啟用 FrameBuffer 必須重新編譯 Kernel。別再聽信沒有根據的謠言啦!Debian 官方所提供的 Kernel 是有支援 FrameBuffer 的。

支援滑鼠

在 X Window 我們可能習於使用滑鼠左鍵選取文字,然後按滑鼠鍵 貼上。那麼我們不禁會想,在 Console 若也能用滑鼠複製貼上應該是一件很幸福的事。而有個 gpm 套件正可以達到這個功能。請安裝 gpm 套件:
aptitude install gpm
然後我們在 Console 下也能用滑鼠左鍵選取文字,然後按滑鼠鍵來貼上那些複製的文 字了。

開機時開啟 NumLock

我想大部份的人應該會很不習慣 Linux 在開機後預設上並不會打開 NumLock,我猜這可能是考慮到 Notebook 使用者的緣故。若想讓系統開機後自動打開 NumLock,請修改 /etc/console-tools/config 如下:
# Turn on numlock by default
LEDS=+num

那麼下次開機時系統就會自動打開 NumLock 了。

禁止 root 登入

雖然直接禁止 root 從本機登入對於主機安全防護而言其實並無多大助益,但至少是聊勝於無吧!方法是修改 /etc/securetty 並在您不希望能讓 root 登入的終端機前加上註解。例:

# /etc/securetty: list of terminals on which root is allowed to login.
# See securetty(5) and login(1).
# console

更佳的方案,是修改 /etc/shadow 並取消 root 的密碼:
root:!:13860:0:99999:7:::

然後善用 susudo 來以 root 身份操作系統。

當然,將機房上鎖、架設監視系統並嚴格禁止任何人接近您的 Linux 主機才是根本的解決之道。

關閉 Kernel 資訊

在 Console 下作業時,電腦螢幕上可能偶爾會跳出一些像是 iptables 的 log 之類的 Kernel 資訊。這些資訊常常會擾亂我們正在操作的螢幕畫面,而這可是非常惱人的。不過,您可以修改 /etc/sysctl.conf 來讓這些資訊不要顯示在 Console 上:
# Uncomment the following to stop low-level messages on console
kernel.printk = 4 4 1 7

但您可能還是希望在必要時還是能看到這些資訊。您可以修改 /etc/syslog.conf 如下:
*.* /dev/tty12
那麼那些被關閉的 Kernel 資訊就會改為顯示於 Virtual Console 12 了。您可以隨時按下 <Alt><F12> 切換至 Virtual Console 12 來查看這些訊息,然後再按下 <Alt><F1> 回到原本的 Virtual Console 1,或是 <Alt><F1>~<F12> 切換到其它的 Virtual Console。

關閉 <Ctrl><Alt><Del>

在預設上,在 Debian GNU/Linux 裡按下 <Ctrl><Alt><Del> 後將會讓電腦關機並重新啟動。也許有人會不喜歡這種設定,尤其習於在 Microsoft Windows 上按下 <Ctrl><Alt><Del> 來登入 Microsoft Windows 網域的人們(嘻~)。您可以修改 /etc/inittab 如下:
# What to do when CTRL-ALT-DEL is pressed.
# ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

並執行:
init q
來讓 <Ctrl><Alt><Del> 失去效用。

電源管理

若您希望您的 Console 在閒置一段時間後會自動關閉螢幕的電源,請修改 /etc/console-tools/config 中的 BLANK_TIMEPOWERDOWN_TIME 等參數。其中,BLANK_TIME 指的是關閉螢幕文字的時間,預設是 10 分鐘。BLANK_DPMS 指的是關閉螢幕文字的方式;而 POWERDOWN_TIME 指的是關閉螢幕文字之後,要關閉螢幕電源的時間。

修改 BASH 提示文字

對於視覺主義者而言,若 BASH 的提示文字能加點文字上的變化或設定為不同顏色將會是件美妙的事。而這並不是什麼難事,您可以修改 ~/.bashrc 來改變 BASH 的提示文字。例:
# set a fancy prompt
export PS1=$'[E[1;33m]u[E[1;31m]@[E[1;35m]h[E[1;32m][T][E[1;31m]:[E[1;36m]w[E[1;34m]$[E[0;39m] '
其顯示效果如下:
Bash Prompt
而該如何修改 BASH 的提示文字請參考 BASH 說明手冊的 PROMPTING 一節,在此就不贅述了。

雖然很多的 Linuxer 可能早已拋棄了文字模式那種命令列操作介面 (CLI, Command Line Interface),那彷彿是遠古時代的原始人才會使用的操作方式,GUI 才是未來的世界趨勢!

但若真要說,個人卻認為 CLI 才是 GNU/Linux 裡最華麗的技巧!比如說,我們想知道在個人目錄下每個子目錄的容量大小,並由小至大列出。這個問題不管是在 Windows 或 GNU/Linux 的 GUI 介面下都不是件容易事,但在 CLI 下卻只要一行指令搞定:

find -maxdepth 1 -type d -exec du -s {} ; | sort -g

看,CLI 是很神奇的!在建議每個 Linuxer 還是要試著去熟悉 CLI,這畢竟是成為一個 Linuxer 的基本功呀!


 
 

Things you can do from here:

 
 
Reply all
Reply to author
Forward
0 new messages