28 tháng 7, 2009

Một cách hiển thị font

Có một số cơ chế hiển thị font chữ lên màn hình (font rasterization). Tuy nhiên, có cách thì hợp với font này, có cách thì hợp với font khác, có cách hợp với loại màn hình này, có cách hợp với loại màn hình khác,… Trên Internet, có khá nhiều bài viết về chủ đề này (ví dụ, tìm trên Google với từ “linux windows fonts.conf hinting”).

Cá nhân tôi, với nhu cầu làm việc với tiếng Việt, tiếng Hoa đồng thời, màn hình loại LCD, thì tôi thấy nhu cầu của mình như sau:

  • Các chữ tiếng Việt dùng font miễn phí của Windows 2000/XP ngày xưa (Times New Roman, Arial,…) với cơ chế hinting full vì những font này được thiết kế như vậy; kết quả được chữ sắc cạnh, dù chữ to hay nhỏ cũng vậy. Nếu dùng chức năng antialias (tức là smoothing), hoặc hinting theo cơ chế khác, kiểu như autohint, thì chữ không đẹp với loại font này, nhất là với cỡ chữ nhỏ, sẽ có viền bao mờ mờ ở ngoài.
  • Các chữ tiếng Hoa và font khác của Linux thì phải có thêm chức năng smoothing, nếu không nét chữ không đẹp. Nhất là các loại font chữ tiếng Trung Quốc, nếu không có smooth thì rất khó đọc. Tuy nhiên, với cỡ chữ đủ nhỏ, thì không nên có smooth, vì chữ sẽ không sắc nét. Bật chức năng dùng embeded bitmap cho một số font cũng tốt.


Font "Arial" với nét sắc cạnh, font chữ Trung Quốc với nét được làm mềm (smooth), tuy nhiên với font chữ Trung Quốc nhỏ (small) thì không dùng chức năng làm mềm.


Một màn hình với font chữ Việt và chữ Trung Quốc được hiển thị bằng các cơ chế khác nhau:

Tóm lại, về lý tưởng nhất, là làm sao có thể yêu cầu hệ thống gán các cách biểu diễn font khác nhau cho các hoàn cảnh khác nhau. Có thể làm bằng cách đặt các điều kiện trong file ~/.fonts.conf (đã thử trên Debian/Ubuntu). Tức là trước hết đặt cơ chế hiển thị font cho trường hợp chung (general) (xem hình dưới đây, gnome-appearance-properties); sau đó điều chỉnh lại cho các trường hợp riêng bằng cách chỉnh trong ~/.fonts.conf (hãy xem ví dụ).

Ngoài ra, trên Internet cũng có thể tìm thấy hướng dẫn bật chức năng smooth (antialias) cho chương trình chạy trên wine bằng script. Hình bên dưới là hvdic chạy trên wine với cơ chế mặc định (không chỉnh smoothing gì cả), cá nhân tôi thì thấy OK với chế độ mặc định.


Screenshot: màn hình dùng fluxbox với giả lập tiling windows; font chữ tiếng Trung có dùng antialias (kiểu như cleartype), còn tiếng Việt thì không dùng antialias nên có chữ sắc nét; chương trình hvdict chạy trên wine của Debian Linux.

Tham chiếu:

24 tháng 7, 2009

Bộ phim “A Decade of Courage”

Bộ phim A Decade of Courage (Một thập kỷ dũng cảm) của Đài truyền hình Tân Đường Nhân (ntdtv.com), về cuộc đàn áp Pháp Luân Công; đúng 10 năm kể từ khi bắt đầu cuộc đàn áp vào 1999.

Một loạt vấn đề được đề cập đến trong bộ phim:

  • Vì sao đảng cộng sản TQ đàn áp Pháp Luân Công
  • Cuộc biểu tình lịch sử Trung Nam Hải 1999
  • Giới thiệu Pháp Luân Công trong bối cảnh TQ đương đại
  • Tính vô nhân đạo và tính diệt chủng của cuộc đàn áp
  • Nạn mổ cướp tạng ở Trung Quốc
  • ...

19 tháng 7, 2009

Cài Ubuntu cho laptop Pavilion dv4t

Laptop HP Pavilion loại dv4t bỏ hết Windows Vista đi kèm (không khuyến khích loại bỏ ổ đĩa D: vốn chứa phần khôi phục hệ thống (system recovery) của bản hãng); tiếp đó cài Ubuntu 9.04 Jaunty. Sau đây là những gì gặp phải.

  • Kết nối mạng: chạy ngay
  • Bàn vẽ Wacom tablet: chạy ngay
  • Đồ hoạ màn hình: chạy ngay, sau khi hệ thống tự detect được nvidia (driver version 180)
  • Loa (sound): ban đầu Ubuntu không nhận ra loa (sound), cần phải chỉnh một chút; các phím multimedia của bàn phím cũng được tự động nhận ra, không phải chỉnh sửa gì
  • Với bộ nhớ RAM lớn hơn 3GB, cần dùng Linux image 32-bit bản mang tên server, hoặc bản 64-bit.
  • Ngoài ra, có thể chỉnh một số chi tiết lặt vặt, như độ tương phản màn hình, phân giải màn hình ở grub boot loader...

Nhìn chung, máy chạy tốt. Màn hình kiểu như màn hình gương, dpi đạt cỡ trên 100dpi một chút (1280 x 800 trên màn hình 14 inch), do đó các font chữ sẽ hơi nhỏ và đọc không rõ nếu dùng font “Tahoma 8” như vẫn quen dùng. Pin dùng 2 ~ 2.5 giờ. Bàn chuột sờ (touch pad) đặt ở giữa máy chứ không phải ở giữa phím space, nên đạt về thẩm mỹ nhưng bất tiện về sử dụng. Chất lượng loa khá tốt. Nên cài Ubuntu mới nhất (hiện nay là Ubuntu 9.04 Jaunty). Đọc thử trên mạng Internet thấy các Ubuntu cũ hơn gặp khá nhiều vấn đề vì không tự tìm được driver. Dù sao HP mới đưa ra xê-ri dv4, dv5 vào cuối năm ngoái.

Cấu hình loa (sound) như sau: thêm vào phần cuối của file /etc/modprobe.d/alsa-base.conf (ở hệ khác Ubuntu, file có thể mang tên khác một chút) sau đó reboot lại máy; lưu ý là vẫn ghi dv5 trong cấu hình mặc dù đang dùng dv4 (hướng dẫn lấy từ https://help.ubuntu.com/community/SoundTroubleshooting):

## -----------------------------------------------
## https://help.ubuntu.com/community/SoundTroubleshooting
options snd-hda-intel model=hp-dv5
options snd-hda-intel enable_msi=1

Với máy có bộ nhớ lớn 3GB thì bản Ubuntu với lõi (kernel) 32-bit là không nhận ra. Giả sử có vật lý 4GB thì nó chỉ nhận ra 3GB. Ví dụ, kiểm tra bằng lệnh free -m:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3291        801       2489          0         95        342
-/+ buffers/cache:        363       2927
Swap:          282          0        282

Có hai phương án. Một là chuyển sang dùng bản Linux 64-bit. Ưu điểm là 64-bit chạy nhanh hơn. Nhưng một số chương trình, codecs của các hãng không mã nguồn mở có thể chưa có bản cho 64-bit. Nói chung, hiện nay cài Linux 64-bit là nhiều khả năng phải cài đồng thêm cả một số thư viện hoặc phần 32 bit để đảm bảo tương thích. Cách thứ hai là dùng bản lõi (kernel) của Linux đã bật chức năng PAE (Physical Address Extension). Trong Ubuntu, bản đó được mang tên là linux image bản server, như vậy vẫn là dùng bản hệ điều hành 32 bit. Cài như sau (hướng dẫn lấy từ http://www.cyberciti.biz/faq/ubuntu-linux-4gb-ram-limitation-solution/):

$ sudo apt-get update
$ sudo apt-get install linux-headers-server \
                       linux-image-server \
                       linux-server

Sau đó khởi động lại máy, kiểm tra OK thì có thể bỏ lõi (kernel) cũ đi. Ví dụ kiểm tra bằng free -m sẽ thấy kiểu như:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3989       1327       2662          0         21       1021
-/+ buffers/cache:        283       3705
Swap:          282          0        282

Ngoài ra, để chỉnh độ tương phản của màn hình, với tôi thấy tăng độ tương phản lên một chút là phù hợp cho công việc thường là soạn thảo vản bản của mình; với lệnh:

$ nvidia-settings --assign gamma=0.75

Muốn độ phân giải của màn hình được chỉnh đúng ngay từ boot loader ---trường hợp mặc định là dùng grub làm boot loader--- thì có thể phải tra bảng bảng các mode của VESA, và thấy rằng với phân giải 1280x800 thì mã số mode là 864. Chỉnh lại file /boot/grub/menu.lst, và sẽ có nội dung đại khái như sau:

.....
## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet vga=864
.....
## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(recovery) single
# altoptions=(recovery mode) single vga=864
.....
title  Ubuntu 9.04, kernel 2.6.28-13-server
uuid  071d728c-8a10-4e5f-bd88-6508adb5abef
kernel  /boot/vmlinuz-2.6.28-13-server root=UUID=xxxxx ro quiet vga=864
initrd  /boot/initrd.img-2.6.28-13-server
quiet

title  Ubuntu 9.04, kernel 2.6.28-13-server (recovery mode)
uuid  071d728c-8a10-4e5f-bd88-6508adb5abef
kernel  /boot/vmlinuz-2.6.28-13-server root=UUID=xxxxx ro  single vga=864
initrd  /boot/initrd.img-2.6.28-13-server
.....

Không rõ tại sao màn hình khi bật lên rất sáng (backlight). Để chỉnh backlight có thre dùng lệnh sau (0 = min, 100 = max):

echo 0 >/proc/acpi/video/EVGA/LCD/brightness

Để chỉnh tốc độ CPU (gia tăng đáng kể thời gian dùng pin khi cần thiết), có thể dùng lệnh cpufreq-set (cần cài đặt cpufrequtils), có thể xem hiện trạng bằng cpufreq-info:

$ sudo apt-get install cpufrequtils
$ sudo cpufreq-set -c 0 -g powersave
$ sudo cpufreq-set -c 1 -g powersave
$ cpufreq-info | grep current

Để sudo không hỏi password khi đánh những lệnh như cpufreq-set, có thể chỉnh trong /etc/sudoers bằng cách chạy sudo visudo rồi thêm vào nội dung kiểu như:

Cmnd_Alias CPUFREG_SET = /usr/bin/cpufreq-set
%admin  ALL=NOPASSWD: SHUTDOWN, REBOOT, HALT, CPUFREG_SET

Ngoài ra, nếu không thích dùng lệnh, thì gnome cũng có sẵn tool đồ hoạ và applet để làm việc này. (Lưu ý, chế độ mặc định (default) là chưa cấu hình cho chạy trực tiếp sudo cho phần này, cần chạy sudo dpkg-reconfigure gnome-applets để chỉnh lại).

Tham chiếu:

Cách cài đặt engine Aurora

Cài đặt engine Aurora Engine trên Ubuntu 9.04 (Jaunty)


Hình trên lấy từ gnome-look.org

Cách cài đặt ở đây được trích từ: http://www.myscienceisbetter.info/2008/03/how-to-install-aurora-gtk-engine-14-ubuntu-hardy.html

Các bước cần làm:

Download từ gnome-look.org.

Cài phần chương trình dịch (compiler modules) nếu chưa có trên Ubuntu:

sudo apt-get install build-essential libgtk2.0-dev

Dịch chương trình và cài vào máy

cd aurora-1.5/
./configure --prefix=/usr --enable-animation
make
sudo make install

15 tháng 2, 2009

Hình desktop với Fluxbox

Hình desktop fluxbox trên Ubuntu 8.04:


Style “Agate”; chạy urxvt, pidgin.

Dùng ~/.fluxbox/keys để lợp (tile) các cửa sổ làm việc; chạy bluefish, hvdic trên wine (từ điển Hán Việt), stardict, firefox.

Hình desktop fluxbox trên Debian Lenny:


Chạy gimp (đồ hoạ), Acrobat Reader.

Style “Snow” với xcompmgr (window shading); chạy Open Office, Firefox.

~/.fluxbox/styles/Agate

~/.fluxbox/styles/Snow

~/.fluxbox/keys

 

19 tháng 1, 2009

Thời gian cho máy con Xen (ntp)

Thời gian (time) của máy ảo (VM Xen guest domU) trong XEN được đặt theo máy cái (host). Vì vậy, để đảm bảo thời gian OK, thì cần: (a) chỉnh đúng thời gian máy cái; và/hoặc (b) tạo máy ảo với thời gian độc lập (independent timing). Tại đây xin trình bày cách (b), phù hợp cho trường hợp không có khả năng can thiệp vào máy cái (host); thí nghiệm trên Debian Lenny, Ubuntu 8.10, và CentOS 5.1.

Đặt trong file /etc/rc.local (startup script):

## initialize computer time
## AFTER making sure that the Xen guest using independent clock
echo 1 > /proc/sys/xen/independent_wallclock
/usr/sbin/ntpdate pool.ntp.org

hoặc nếu không thích dùng /etc/rc.local thì có thể đặt trong /etc/sysctl.conf:

## Independent wall clock time to XenServer Host
xen/independent_wallclock = 1

Sau đó đặt chỉnh giờ định kỳ (ví dụ vào 5:30 AM hàng ngày) trong /etc/crontab:

## time sync daily
30 5    * * *   root    /usr/sbin/ntpdate pool.ntp.org

Nếu cảm thấy ntpdate chưa đủ chính xác, thì có thể dùng ntp (time server) chạy ở chế độ dịch vụ (daemon), khi đó thời gian sẽ được chỉnh chính xác hơn. Bỏ ntpdate trong crontab đi, và cài ntp như sau, với Debian/Ubuntu:

# apt-get install ntp

hoặc với CentOS:

# yum install ntp

Lưu ý: trong Debian/Ubuntu, ntp và ntpdate được xếp vào 2 gói (package) riêng, còn với CentOS thì cả 2 nằm trong 1 gói ntp.

Cấu hình của ntp được đặt trong /etc/ntp.conf, trong đó có danh sách các máy chủ thời gian (time server) khác được sử dụng để tham chiếu thời gian. Có thể xem trạng thái của dịch vụ ntp, xem xem trạng thái so với các máy chủ khác mà nó tham chiếu thời gian đến:

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 starlite.ispwor .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 24.node6504.gpl .INIT.          16 u    - 1024    0    0.000    0.000   0.000
 203.116.5.254   129.6.15.29      2 u   81  512  151  1005.25  -470.58  10.582

Lưu ý: giao thức ntp (Network Time Protocol) dùng cổng UTP 123 cả hai phía client và server; như vậy, khi ntp đang chạy thì ntpdate không chạy được vì cổng UTP 123 bị bận ở phía client. Nếu muốn chạy ntpdate thì phải tạm ngưng dịch vụ ntp, với Debian/Ubuntu:

# /etc/init.d/ntp stop
# ntpdate pool.ntp.org
# /etc/init.d/ntp start

hoặc với CentOS:

# /etc/init.d/ntpd stop
# ntpdate pool.ntp.org
# /etc/init.d/ntpd start

Tham khảo:

12 tháng 1, 2009

dwm và ion3

Giới thiệu

Tiling Window Manager rất tiện dụng (thực dụng, không màu mè). Màn hình làm việc tựa như một IDE với các ô ngăn ra (tiling) chứ không phải là các cửa sổ chồng chéo (stacked). Trên Internet có rất nhiều bài viết về tính tiện dụng và hiệu quả của nó, nhất là hiện nay phổ biến màn hình lớn (19 inch trở lên), màn hình wide, và dùng nhiều màn hình (http://en.wikipedia.org/wiki/Tiling_window_manager). Trên Linux, có một số loại như dwm, xmonad, wmii, ion3,... Cá nhân tôi rất thích dwm với cơ chế Dynamic Tiling (lợp động) cộng với Window Tagging (dùng tag chứ không phải dùng Workplace), và ion3 với cơ chế Manual Tiling (lợp bằng tay) cộng với Tabbed Window (cửa sổ tab kiểu như FireFox). Xin viết ra đây quá trình cài đặt trên Debian Lenny và Ubuntu 8.10.

dwm

Cài đặt dwm đòi hỏi một chút kỹ năng lập trình C++, vì chương trình này cung cấp dưới dạng mã nguồn (source code). Cấu hình cũng đặt thẳng vào mã nguồn. Download mã nguồn trực tiếp từ website của tác giả (http://dwm.suckless.org/). Hiện nay là version 5.3.1. Có thể cài thêm một số mở rộng (patch). Tôi dùng thêm bstack (bottom stack).

Sau khi chạy tar zxvf dwm-5.3.1.tar.gz thì chạy áp phần patch bstack vào. Phần patch này sửa file config.def.h và tạo thêm file bstack.c. Chạy cp config.def.h config.h để tạo file cấu hình (cấu hình đặt trong mã nguồn này), sau đó ta chỉnh sửa file config.h theo ý của mình (đặt phím nóng, mầu, v.v) Gọi là sửa mã nguồn vậy, chứ chỉnh sửa nó không khó khăn gì mấy, vì tác giả soạn chương trình khá rõ ràng dễ sửa ở file này.

Sau đó chạy make để dịch chương trình. Lưu ý là dwm dùng thư viện (library) xinerama, vì vậy ngoài trình dịch (compiler) C++ cùng thư viện chuẩn (standard) còn cần thêm xinerama (apt-get install libxinerama-dev). Vậy là xong phần biên dịch. Tôi *không* cài dwm vào hệ thống (system wide) mà chỉ cài ở mức người dùng.

Tiếp đến, khai báo dwm cho hệ thống để chương trình login đồ hoạ (như gdm, kdm, xdm) biết: tạo file /usr/share/xsessions/my-dwm.desktop với nội dung như sau:

[Desktop Entry]
Encoding=UTF-8
Type=XSession
Exec=startdwm
TryExec=startdwm
Name=My DWM
Comment=DWM window manager

Và tạo file /usr/local/bin/startdwm với nội dung như sau:

#!/bin/bash
exec ~/.dwm/startup

Sau đó chạy chmod +x /usr/local/bin/startdwm. Nghĩa là, người dùng nào muốn dùng DWM thì phải tạo chương trình khởi động ~/.dwm/startup. Ví dụ, chương trình startup của tôi có nội dung như sau:

#!/bin/bash

export PATH=$PATH:$HOME/bin
export XMODIFIERS="@im=SCIM"

function my_dwm () {
while true ; do
MEM_USAGE=`free -m`
MY_STATUS=`echo $MEM_USAGE | cut -d ' ' -f 7,10,13,16,18,20`
MY_TIME=`date +'[%I:%M %a %d]'`
echo $MY_TIME $MY_STATUS
sleep 60
done | dwm &>/dev/null &
}

export -f my_dwm

my_dwm

gnome-settings-daemon &>/dev/null &

urxvtd -f -o -q &>/dev/null
urxvtc -bc -tn rxvt +sb -bg black \
   -fg rgb:c/c/c -cr green -sl 2222 &>/dev/null &

scim -d &>/dev/null &
stardict &>/dev/null &

#xscreensaver -no-splash &>/dev/null &
#xsetroot -solid black
#xsetroot -solid SlateGray
#xset r rate 200 45

## the 'last' application
exec lxpanel &>/dev/null

Như vậy là tôi dùng lxpanel (chương trình có menu hệ thống và systray) làm chương trình 'cuối'. Muốn logout thì cần phải killall lxpanel. Tôi dùng gnome để đặt cấu hình cho GTK, bàn phím, chuột, v.v. Hơi nặng một chút. Có thể dùng gtk-theme-switch và chỉnh bàn phím, màu màn hình nền bằng xsetxsetroot.

ion3

Cài ion3 bằng lệnh apt-get install ion3.

Cấu hình của ion3 đều được đặt ở /etc/X11/ion3/. Đó là các chương trình viết trên ngôn ngữ lua. Cần sửa cấu hình nào thì copy phần đó về ~/.ion3/ rồi sửa đi là xong. Tôi cần sửa 3 files: cfg_ion.lua gồm các cấu hình cơ sở, cfg_dock.lua gồm cấu hình phần docking kiểu như Window Maker, và look.lua gồm cấu hình về màu sắc và các chi tiết giao diện (skin). Nội dung cfg_ion.lua như sau:

--
-- Ion main configuration file
--
dopath("cfg_debian")
META="Mod4+"
ALTMETA="Mod4+Control+"
XTERM="urxvt -bc -tn rxvt +sb -bg black -fg rgb:c/c/c -cr green -sl 2222"
ALTXTERM=XTERM.." -fn 9x15"
ioncore.set{
}
dopath("cfg_ioncore")
dopath("cfg_kludges")
dopath("cfg_layouts")
dopath("mod_query")
dopath("mod_menu")
dopath("mod_tiling")
--dopath("mod_statusbar")
dopath("mod_dock")
dopath("mod_sp")
--dopath("cfg_debian_ext")

--
-- TD personalization
--

function td_toggle_topbar(curmod)
   if curmod == 'tiled' then return 'tiled-alt' end
   if curmod == 'tiled-alt' then return 'tiled' end
   if curmod == 'floating' then return 'floating-alt' end
   if curmod == 'floating-alt' then return 'floating' end
   if curmod == 'transient' then return 'transient-alt' end
   if curmod == 'transient-alt' then return 'transient' end
   if curmod == 'unknown' then return 'unknown-alt' end
   if curmod == 'unknown-alt' then return 'unknown' end
   return 'tiled'
end

defbindings("WFrame", {
   kpress(META.."F10", "_:set_mode(td_toggle_topbar(_:mode()))"),
   kpress(META.."slash", "ioncore.exec_on(_, 'my-text-assistant')"),
   kpress(META.."F2", "ioncore.exec_on(_, ALTXTERM)"),
   kpress(ALTMETA.."L",
      "ioncore.exec_on(_, 'gnome-screensaver-command --lock')"),
})

Trong cfg_dock.lua tôi dùng embedded thay cho floating. Còn file look.lua là copy từ một trong các file /etc/X11/ion3/look_*lua rồi chỉnh theo sở thích là xong.

Cũng có thể tạo cơ chế startup cho ion3 tương tự như đã làm với đwm. Ví dụ nội dung ~/.ion3/startup như sau:

#!/bin/bash

##

export PATH=$PATH:$HOME/bin
export XMODIFIERS="@im=SCIM"
export XIM=SCIM
export GTK_IM_MODULE=scim-bridge
export QT_IM_MODULE=scim-bridge

##

docker -wmaker &>/dev/null &
wmnetmon &>/dev/null &
wmbubble -d &>/dev/null &
wmtime &>/dev/null &

xscreensaver -no-splash &>/dev/null &

gnome-settings-daemon &>/dev/null &

urxvt -bc -tn rxvt +sb -bg black \
   -fg rgb:c/c/c -cr green -sl 2222 &>/dev/null &

scim -d &>/dev/null &
stardict &>/dev/null &

## the 'last' application
exec ion3 &>/dev/null

Tham chiếu:

9 tháng 1, 2009

Cài thêm card màn hình 3D cho Debian Lenny

Mới cài thêm card màn hình 3D GeForce cho máy Debian Lenny. Kết quả: cần phài cấu hình lại đồ hoạ.

$ su -
# apt-get install nvidia-glx nvidia-xconfig nvidia-settings

Như vậy là cài đặt xong trình điều khiển (driver) cho card màn hình. Lệnh aptitude show nvidia-glx cho thấy version hiện nay của driver này là Depends: nvidia-kernel-173.14.09, và cho thấy trong danh sách các card màn hình nó support (hỗ trợ) có card màn hình cần cài đặt là GeForce 7100 GS 256 MB RAM. Tiếp đó (cẩn thận thì reboot lại máy và) chạy lệnh:

$ su -
# nvidia-xconfig

Lệnh trên là detect (phát hiện) card đồ hoạ và chỉnh lại file /etc/X11/xorg.conf. Sau đó reboot (khởi động lại) máy, hoặc chỉ cần khởi động lại chế độ đồ hoạ X Window (nhấn Ctrl-Alt-Backspace), và chạy lệnh:

$ gksu nvidia-settings
để cài đặt các đặc tính của card đồ hoạ (nhận dạng màn hình (monitor)), đặt độ phân giải, v.v.