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
試試看吧

沒有留言: