2009年3月28日 星期六

字型設定-KDE 字型設定

其實這問題並沒有想像中的嚴重
windows xp 的字我覺得也好看不到哪裡去
只有 monospace 的字型得改
不然終端機字型有時會被截斷或顯示不正常...
先看圖
寄件者 font-settings

寄件者 font-settings

寄件者 font-settings

寄件者 font-settings

第1張圖是桌面,第2張圖是小海豚(Dolphin)
我把這兩張當成 qt4 應用程式的代表
第3張是咖啡因(kaffeine),目前仍是 qt3 應用程式
第4張是火狐狸(firefox),就當成是 gtk2 的代表吧。
前三張 qt-base 程式都有個小問題
就是抓取字型時會依照 locale 的設定
所以都會先抓到中文字型
您可以自己試試看
$ fc-match sans-serif
odosung.ttc: "AR PL New Sung" "Regular"
$ export LC_ALL=C
$ fc-match sans-serif
DejaVuSans.ttf: "DejaVu Sans" "Book"

而 firefox 則會依照 fontconfig 的設定先使用英文字型(這就是我們想要的效果)
找不到字時再使用下一個優先順序的字型
看他們的選單,就可以看出差別
firefox 的"檔案 (F)"英文和括弧的部份使用 DejaVu Sans
而其他的 qt 應用程式則繼續使用 AR PL New Sung 的英文字
(注意:視窗裝飾的部份不算,黑色邊框是 emerald 的視窗裝飾主題
這裡的字型是由視窗主題設計者決定的,看 firefox 用的 kwin 就知道不一樣)

症狀大概就是這樣
處方如下:
(1) 在 KDE4 中用『系統設定』->『外觀』->『字型』來變更
您應該選擇您偏好的英文字型
原本是:
寄件者 font-settings

改成:(尤其是 monospace 一定要改)
寄件者 font-settings

如此 QT4 的程式就會 OK
寄件者 font-settings

寄件者 font-settings

您也可以用命令列來呼叫系統設定
$ systemsettings

(2) 但是即使在 KDE4 的環境中,還是有很多 KDE3 的程式
以前用 KDE3 的『控制中心』來調整字型
其實這個控制中心是屬於 kdebase3 的指令
雖然沒有圖示選單的連結
您還是可以直接用
$ kcontrol

來呼叫它
寄件者 font-settings

將他改成用 DejaVu Sans 做預設字型:
寄件者 font-settings

套用後,kaffeine, k3b 等殘餘的 qt3-base 程式的字型也就會跟著變動了
寄件者 font-settings


(3) 最後還剩下 yast2 之類的用 root 權限執行的應用程式
因為使用的環境和一般使用者不同
所以剛才的設定無效
寄件者 font-settings

請執行下面命令,注意 su 後面有 "-"
$ su -
密碼:
# qtconfig

寄件者 font-settings

將字型改成 DejaVu Sans
寄件者 font-settings

然後就大功告成了
寄件者 font-settings


(4) 您可能還需要用到
$ su -
密碼:
# /usr/lib/qt3/bin/qtconfig

這是 qt3 的 qtconfig
YaST2 的主程式與各模組似乎會用不同的 qt 函式庫...

(5) 總結一下
QT4 程式: systemsettings 和 qtconfig
QT3 程式: kcontrol 和 /usr/lib/qt3/bin/qtconfig
您或許可以試著用一般使用者和 root 分別設定一次

(6) 下面這個 script 會將 systemsettings, kcontrol 和 qtconfig(qt4)預設的 Sans Serif
換成 DejaVu Sans。我不知道全系統的設定在哪? qt3 的 qtconfig 設定檔不知道對不對 ...
反正品質沒保證,您用上面的圖形介面改可能好些
kde-font-setting.sh
#!/bin/bash
echo $LANG | grep zh > /dev/null
if [ "$?" == "0" ]; then
echo "這個小程式會試著將您 KDE 桌面預設的字型從 Sans Serif 和 Monospace"
echo "改成 DejaVu Sans 和 DejaVu Sans Mono"
echo "它只是簡單的將相關設定檔中的 Sans Serif 等字樣換成 DejaVu Sans"
echo "如果您曾將字型設成其他字型,這個小程式就不適用了"
echo "要繼續請按 'y',按其他鍵退出"
else
echo "This script will try to modify your default KDE desktop fonts from"
echo "Sans Serif and Monospace to DejaVu Sans and DejaVu Sans Mono"
echo "It's just an simple replacement from Sans Serif to DejaVu Sans"
echo "in your related config file"
echo "If you had modified your default fonts other than Sans Serif"
echo "This script will not work for you"
echo "Press 'y' to continue, any other key to exit"
fi
read yn
if [ "$yn" == "y" ]; then
echo "Modify qt4-base fonts in" $HOME
grep General $HOME/.kde4/share/config/kdeglobals > /dev/null
if [ "$?" == "0" ]; then
sed 's/Sans Serif/DejaVu Sans/' $HOME/.kde4/share/config/kdeglobals > $HOME/.kde4/share/config/kdeglobals-1.tmp
sed 's/Monospace/DejaVu Sans Mono/' $HOME/.kde4/share/config/kdeglobals-1.tmp > $HOME/.kde4/share/config/kdeglobals-2.tmp
cp $HOME/.kde4/share/config/kdeglobals-2.tmp $HOME/.kde4/share/config/kdeglobals
rm $HOME/.kde4/share/config/kdeglobals-*.tmp
else
cat << _END >> $HOME/.kde4/share/config/kdeglobals

[General]
desktopFont=DejaVu Sans,10,-1,5,50,0,0,0,0,0
fixed=DejaVu Sans Mono,10,-1,5,50,0,0,0,0,0
font=DejaVu Sans,10,-1,5,50,0,0,0,0,0
menuFont=DejaVu Sans,10,-1,5,50,0,0,0,0,0
smallestReadableFont=DejaVu Sans,8,-1,5,50,0,0,0,0,0
taskbarFont=DejaVu Sans,10,-1,5,50,0,0,0,0,0
toolBarFont=DejaVu Sans,8,-1,5,50,0,0,0,0,0
_END
fi
# I'm not sure if this font size fits all
echo "Modify qt3-base fonts in" $HOME
grep General $HOME/.kde/share/config/kdeglobals > /dev/null
if [ "$?" == "0" ]; then
sed 's/Sans Serif/DejaVu Sans/' $HOME/.kde/share/config/kdeglobals > $HOME/.kde/share/config/kdeglobals-1.tmp
sed 's/Monospace/DejaVu Sans Mono/' $HOME/.kde/share/config/kdeglobals-1.tmp > $HOME/.kde/share/config/kdeglobals-2.tmp
# monospace font default set to courier ?
sed 's/courier/DejaVu Sans Mono/' $HOME/.kde/share/config/kdeglobals-2.tmp > $HOME/.kde/share/config/kdeglobals-3.tmp
cp $HOME/.kde/share/config/kdeglobals-3.tmp $HOME/.kde/share/config/kdeglobals
rm $HOME/.kde/share/config/kdeglobals-*.tmp
else
cat << _END >> $HOME/.kde/share/config/kdeglobals

[General]
fixed=DejaVu Sans Mono,10,-1,5,50,0,0,0,0,0
font=DejaVu Sans,10,-1,5,50,0,0,0,0,0
menuFont=DejaVu Sans,10,-1,5,50,0,0,0,0,0
taskbarFont=DejaVu Sans,10,-1,5,50,0,0,0,0,0
toolBarFont=DejaVu Sans,10,-1,5,50,0,0,0,0,0
_END
fi
echo "Changing qtconfig-font (QT4) setting ..."
grep "font=" $HOME/.config/Trolltech.conf > /dev/null
if [ "$?" == "0" ]; then
sed 's/Sans Serif/DejaVu Sans/' $HOME/.config/Trolltech.conf > /tmp/Trolltech.conf.tmp
mv /tmp/Trolltech.conf.tmp $HOME/.config/Trolltech.conf
else
cat << _END >> $HOME/.config/Trolltech.conf

[Qt]
font="DejaVu Sans,10,-1,5,50,0,0,0,0,0"
_END
fi
echo "Changing qtconfig-font (QT3) setting ..."
grep "font=" $HOME/.qt/qtrc > /dev/null
if [ "$?" == "0" ]; then
sed 's/Sans Serif/DejaVu Sans/' $HOME/.qt/qtrc > /tmp/qtrc.tmp
mv /tmp/qtrc.tmp $HOME/.qt/qtrc
else
cat << _END >> $HOME/.qt/qtrc

[General]
font="DejaVu Sans,10,-1,5,50,0,0,0,0,0"
_END
fi
echo "Done !"
if [ "$HOME" != "/root" ]; then
echo $LANG | grep zh > /dev/null
if [ "$?" == "0" ]; then
echo "您可以再用 root 身份執行一次這個小程式"
echo "有些設定需要有 root 權限才能變更"
else
echo "You may want to run this script as root"
echo "Some setting can only be changed with full root privilege"
fi
else
sed 's/Sans Serif/DejaVu Sans/' /etc/X11/qtrc > /tmp/xqtrc.tmp
mv /tmp/xqtrc.tmp /etc/X11/qtrc
fi
fi

將上面文字存檔,取名 kde-font-setting.sh
chmod +x kde-font-setting.sh
./kde-font-setting.sh
試試看吧

2009年3月19日 星期四

字型設定-fontconfig

fontconfig 是大部份 linux 應用程式所遵循的字型設定
若要自行設定字型,您不可以不知道
他的設定檔在 /etc/fonts 目錄下
主要的檔案是 fonts.conf
上游已寫好可現成取用的設定檔則放在 /etc/fonts/conf.avail 目錄
將您要用的設定連結到 /etc/fonts/conf.d 目錄
然後執行 fc-cache 就會
(1)檢查是否有語法錯誤,並且
(2)新開啟的應用程式就會馬上套用新的設定
您可以參考 fonts-conf (繁體中文版 fonts-conf 手冊簡體中文版 fonts-conf 手冊)
若看英文沒什麼困難,直接在終端機用 man 來看
$ man fonts-conf
我們要用 fontconfig 來設定您要用的字型及效果

(1)您偏好的字型
在 fontconfig 中分成三個字族:
sans (sans-serif,無襯線字體),通常這是大部份程式預設使用的字體
serif (有襯線字體)
monospace (等寬字體),通常終端機會使用此字體
有襯線字和無襯線字的差別,請看 http://blog.bs2.to/post/EdwardLee/3401

SUSE/openSUSE 中的 /etc/fonts/suse-post-user.conf
就是設定偏好的字體
摘錄關於 sans-serif 的一段
<alias>
<family>sans-serif</family>
<prefer>
<family>Arial</family>
<family>Albany AMT</family>
<family>Verdana</family>
<family>DejaVu Sans</family>
<family>Liberation Sans</family>
<family>SUSE Sans</family>
<family>Bitstream Vera Sans</family>
<family>Nimbus Sans L</family>
<family>Luxi Sans</family>
<family>Mukti Narrow</family>
<family>Nachlieli CLM</family>
<family>Helvetica</family>
<family>Khmer OS System</family>
<family>Lohit Punjabi</family>
<family>Lohit Oriya</family>
<family>Pothana2000</family>
<family>TSCu_Paranar</family>
<family>BPG Glaho</family>
<family>Terafik</family>
<family>FreeSans</family>
<family>Meiryo</family>
<family>MS PGothic</family>
<family>MS Gothic</family>
<family>HGPGothicB</family>
<family>HGGothicB</family>
<family>IPAPGothic</family>
<family>IPAGothic</family>
<family>Sazanami Gothic</family>
<family>Kochi Gothic</family>
<family>CMEXSong</family>
<family>FZSongTi</family>
<family>AR PL ShanHeiSun Uni</family>
<family>FZMingTiB</family>
<family>AR PL SungtiL GB</family>
<family>AR PL Mingti2L Big5</family>
<family>UnDotum</family>
<family>Baekmuk Gulim</family>
<family>Baekmuk Dotum</family>
</prefer>
</alias>

如果您沒裝到日文字型,應該您的 sans-serif 字型
在英文部份會對應到 DejaVu Sans
中文字型則對應到 AR PL ShanHeiSun Uni
(11.1 中 CMEXSong 和 FZMingTiB 都不再安裝了)
所以您的 gtk2-base 的程式應該都可以正常顯示中英文
qt-base 的程式也支援 fontconfig 的設定檔
但是『敏感程度』不同
若在 zh_TW 環境中,他會優先選擇中文字型來當成預設字型
結果英文部份就沒這麼好看了
下一篇再針對 qt-base 程式來設定

您可以參考 http://blog.bs2.to/post/EdwardLee/16981
原本 SUSE/openSUSE 中的 /etc/fonts/suse-post-user.conf 的
<alias> 標籤全部改成
 <alias binding="strong">

您會發現 qt-base 的程式也會遵循 fontconfig 優先使用英文字型
可惜是在 flash 中的中文就會壞掉了...(目前只發現這個問題)
如下圖所示
寄件者 font-settings

正常畫面應為
寄件者 font-settings


(2)用點陣字顯示偽粗體中文
不知道從什麼時候開始
gtk2 程式的偽粗體會使用平滑(反鋸齒)字型
像是自由軟體技術交流網
寄件者 font-settings

同一個網頁在 Konqueror 中看起來則是
寄件者 font-settings

如果您想要改成點陣的粗體(不一定比較好看,純個人偏好)
可以用下面這個 30-fake-bold-dont-antialias.conf
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!--
Synthetic emboldening for fonts that do not have bold face available
-->
<!--#沒有粗體的字型使用模擬粗體-->
<match target="font" >
<!-- check to see if the font is just regular -->
<test compare="less_eq" name="weight" >
<int>100</int>
</test>
<!-- check to see if the pattern requests bold -->
<test target="pattern" compare="more_eq" name="weight" >
<int>180</int>
</test>
<!-- set the embolden flag -->
<edit mode="assign" name="embolden" >
<bool>true</bool>
</edit>
<!-- disable antialias for small font-->
<test compare="less" name="pixelsize" >
<double>15.5</double>
</test>
<edit name="antialias" >
<bool>false</bool>
</edit>
</match>
</fontconfig>

將這檔案放在 /etc/fonts/conf.avail/ 中
做一個連結到 /etc/fonts/conf.d/ 底下
再執行 fc-cache 即可
重新啟動 firefox 畫面如下
寄件者 font-settings


(3)設定最小字型
字太小實在沒什麼意義
但是字太大有時會影響到排版的問題
數字部份您自己嘗試看看
當您的螢幕解析度愈大時
您需要設定更大的數字
用下面的設定檔 20-minimal-font-size.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<test name="pixelsize" compare="less">
<double>11.5</double>
</test>
<edit name="pixelsize" mode="assign">
<double>11.5</double>
</edit>
</match>
</fontconfig>

完成後的圖
寄件者 font-settings

請仔細看一下右邊登入的部份
差別就一點點,但是舒服很多了

以上兩個設定檔,您也可以在 swyear 套件庫的 chinese-fonts-setting 套件中找到
參考資料:果正兄的字型扎記有很多關於字型的文章,十分值得參考

2009年3月17日 星期二

字型設定-解析度

您的螢幕若是1024*768的12.1吋螢幕
表示橫向有1024個畫素,縱向有768個畫素,這兩個數值電腦可以偵測得到
但您的螢幕大小常偵測不出來(當然有些品牌螢幕型號已經建立了資料庫,就會順利偵測到)
這個螢幕的對角線上大約有1280個畫素

所以在每1吋上約有1280/12.1=105個畫素,稱為105dpi
這是硬體上的數值,不能改變的。
在 openSUSE 可以用 sax2 來設定正確的解析度
# sax2

寄件者 font-settings

在螢幕(Monitor)處選擇變更...(Change...)
寄件者 font-settings

在此選擇正確的螢幕類型(或品牌型號)以及螢幕畫素
寄件者 font-settings

接著設定螢幕對角線尺寸及長寬比
如此便完成了解析度的基本設定
請記得先測試一下,以免發生不幸。
解析度的高低會影響字體的品質
如果您的解析度低於100dpi我會建議您使用點陣字會得到較佳的效果
像是 ttf-arphic-uming (openSUSE 內建)或 opendesktop-fonts-odosung (可由 home:swyear 套件庫取得)

2009年3月14日 星期六

LXDE 1-Click Install

體驗輕盈的快感,您可以試試 LXDE
使用下面的單鍵安裝,
For openSUSE 11.1:

For openSUSE 11.0:

完成後登出,在您的登入管理員中選擇 LXDE 的工作階段,然後 enjoy it!
寄件者 LXDE

2009年3月9日 星期一

compiz 比 kwin 順

現在的桌面 kde 4.2.1, openSUSE 11.1, nvidia 180.37
在系統設定->預設應用程式->視窗管理員改用 compiz
(先將系統設定 ->桌面->開啟桌面特效先取消)
若是出現視窗裝飾(window decoration)不見的情形
請換成別的套件庫中的 compiz
我用了下面這個一鍵安裝
http://download.opensuse.org/repositories/X11:/XGL/openSUSE_11.1_KDE4_Factory/compiz-kde4.ymp
並加裝了 compiz-emerald-themes
在 ccsm 的視窗裝飾中指定指令為 emerald --replace
寄件者 kde42

就大功告成了
真的覺得畫面順暢許多
特效也比 kwin 稍炫...
kwin 還可以再加油

2009年3月6日 星期五

升級 KDE 4.2

詳細介紹請看: http://en.opensuse.org/KDE4
KDE 4.2.x 使用的是 Factory 的套件庫
Factory 在 openSUSE 的定義(http://en.opensuse.org/Factory)是:
下一個 openSUSE 版本目前的開發狀態,也就是說,它可能每天在變動,
並不會有一個穩定狀態,這在使用前要先知道。
另外,建議先將所有桌面的元件關閉

http://en.opensuse.org/KDE4 中選擇適合的 1-Click Install
寄件者 kde42

按下去就會開始安裝,請選擇使用 YaST 中繼套件管理員來開啟
寄件者 kde42

我們要安裝 KDE4 桌面,請按下一步
寄件者 kde42

要加入的套件庫與預設安裝的套件,因為 update 套件庫已經有了,要修改請按自訂
寄件者 kde42

取消不要的套件庫,因為打算繼續用此套件庫升級 kde 4.2,所以要繼續訂閱
寄件者 kde42

看一下軟體清單
寄件者 kde42

再重新檢查
寄件者 kde42

匯入套件庫的金鑰,請按匯入
寄件者 kde42

若有衝突(可能有很多),請勿慌張,注意您要升級到 4.2.x,所以刪除相關 4.1.3 的套件,再按下
確定,再試一次,直到所有衝突解決,如果沒特殊理由,請不要忽略套件相關性
寄件者 kde42

按下接受
寄件者 kde42

會自動升級所需的套件,有些會移除
寄件者 kde42

接著就會開始安裝
寄件者 kde42

安裝完成
寄件者 kde42


如果您正在使用 KDE4桌面環境,接下來可能要重開機(只登出似乎沒用)
然後重新加上您喜愛的桌面元件,完成本次升級。
(如果您本來開啟了桌面特效,可能您要重開啟一次)
寄件者 kde42

您可以用『我的電腦』看到 kde4 的版本為 4.2.1
寄件者 kde42


我注意到的地方:
1. 桌面資料夾已經可以顯示中文 desktop 名稱
2. 新增了一些新的桌面元件
(有些元件會導致 plasma 崩潰,可能是使用了非官方版本的 libqt4(例如 swyear 套件庫中的))
3. ksnapshot 的連續檔案名稱可正常運作了
4. 不知道為什麼 kpowersave 會被移除,這會導致我的筆電無法 suspend to ram,要自行再用 yast 安裝一次
5. 如果您比較喜歡黑色發亮的工具列,可以將
kdebase4-workspace-branding-openSUSE 換成 kdebase4-workspace-branding-upstream
寄件者 kde42

6. 使用 nvidia 顯示卡搭配 kdm4 時,登出登入會出現可怕的桌面碎片殘像
根據大陸網友的建議,改用 gdm
(發現 gdm 常常會將我登入到不完整的 gnome 桌面,且將我的 YaST 改用 gtk 前端,
再改用 kdm3)
(我的 nvidia 驅動程式已升級到 180.29)
7. 我的想法是,沒什麼問題就不用再升級,若遇到什麼問題需要升級的話
可以用以下指令來升級 kde4 的相關套件
# zypper lr
# | 別名 | 名稱 | 已啟用 | 重新整理
---+--------------------------+--------------------------+--------+---------
1 | Education | Education | 是 | 否
2 | KDE:KDE4:Factory:Desktop | KDE:KDE4:Factory:Desktop | 是 | 否

您可以從上面看見 KDE4 套件庫在編號 2,使用以下命令指定由 2 號套件庫升級
# zypper ref 2
# zypper up -t package -r 2