2008年12月30日 星期二

linux 下使用 shntool 將 ape/cue 轉成 flac 技巧

安裝必要解碼器,例如 mac(for ape decoder), flac 等
ps. mac 在 gentoo-taiwan 的 overlay 中才有

一般下載到的APE都是一個.ape加一個.cue成對的文件,cue中保存了CD音軌信息。
轉換方法是下面這條命令:
shntool split -f image.cue -t '%n.%t' -o flac image.ape

即得到flac格式的音樂文件並按照cue文件信息,分割成每首歌曲一個文件。

或是直接轉換整個檔案:
shntool conv -o flac xxxxx.ape

或是選用最大壓縮比:
shntool conv -o "flac ext=flac flac -s -8 -o %f -" xxxxx.ape

2008年12月20日 星期六

解決 hal 無法自動 mount ntfs-3g 的問題

在 kde 中點選自動掛載後,會出現下面的錯誤訊息:
org.freedesktop.Hal.Device.UnknownFailure: TODO: have to rethink extra options

此時新增以下檔案即可解決問題
nano /usr/share/hal/fdi/policy/10osvendor/20-ntfs-config-write-policy.fdi
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
 
 <deviceinfo version="0.2">
     <device>
         <match key="volume.fstype" string="ntfs">
             <match key="@block.storage_device:storage.hotpluggable" bool="true">
                 <merge key="volume.fstype" type="string">ntfs-3g</merge>
                 <merge key="volume.policy.mount_filesystem" type="string">ntfs-3g</merge>
                 <append key="volume.mount.valid_options" type="strlist">locale=</append>
             </match>
         </match>
     </device>
 </deviceinfo>

參考: [SOLVED] Can't automount external drive w/ NTFS partition

linux 下用 nvidia vdpau 播放高畫質 HD 電影

安裝 180 以後的驅動程式
到 ftp://download.nvidia.com/XFree86/vdpau/ 下載 mplayer-vdpau-3219724.tar.bz2
解壓縮後直接執行 ./checkout-patch-build.sh 他就會自動下載並編譯好
執行編譯好的 mplayer-vdpau-3219724/mplayer-vdpau/mplayer
他支援 h264, mpeg1/2, wmv 三種格式
mplayer -vc help | grep vdpau 可以看到

播放方法為 mplayer -vc ffh264vdpau -vo vdpau xxxxxx.mkv

如果看不到 OSD 字型,請 ln -s /usr/share/fonts/arphicfonts/odosung.ttc ~/.mplayer/subfont.ttf 即可 (注意看畫面上給你的錯誤訊息就會知道需要這個檔)

不過目前測試播放影片好像會頓頓的,畫面會突然頓一下並回到 500ms 以前的畫面然後才繼續
可能是 av 不同步或是還有其他問題吧
不過至少已經可以硬解 h264 了,真愛 nvidia !!

參考連結:
我的优化PC:在Linux下进行高清VDPAU解码测试

解決安裝 OpenDesktopFont 後 標楷體 不管任何大小都開啟 antialias

安裝好 OpenDesktopFont-1.4.2 後,會發現 標楷體 字型看起來很破碎...
不管任何大小的字型似乎都沒有內嵌點陣字體
而且開啟 antialias 後字型反而比較能夠看
而一般字體反而不開 aa 會比較清楚好看
因此呢我們必須針對 標楷體 而外處理

在 kde 字型那邊設定好 aa 後,需要額外編輯 ~/.fonts.conf 如下
<match target="font" >
<test compare="more_eq" name="size" qual="any" >
<double>8</double>
</test>
<test compare="less_eq" name="size" qual="any" >
<double>15</double>
</test>
<test compare="not_eq" name="family" qual="any" >
<string>標楷體</string>
</test>
<edit mode="assign" name="antialias" >
<bool>false</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="antialias" >
<bool>true</bool>
</edit>
</match>


記得把檔案轉成 utf8 格式,並改成唯讀以免被改掉

running 32bit apps on 64bit kernel with nvidia

當記憶體大於 4G 的時候,32bit 的 kernel 雖然可以透過啟動 64G 來 access 所有 memory
但是 PAE 會降低系統效能,此外好像 64bit kernel 的選項比較新 (...好吧,是心理作用...)
非常不准的效能測試:
hdparm -tT /dev/sda
發現 32bit with PAE 大約 36xx MB/Sec 而 64bit 可以跑到 40xx MB/Sec
很爛的測試,知道更好的方法請告訴我...

====== 重點開始 ======

Step 1. 建立 cross compile 環境

# emerge crossdev
# crossdev -s1 -t x86_64

Step 2. 編譯 64bit 的 kernel
編輯 kernel 的 Makefile , 增加下面兩行:
ARCH=x86
CROSS_COMPILE=x86_64-pc-linux-gnu-
接下來如常編譯與安裝即可


Step 3. 編譯 nvidia drivers

到 ftp://download.nvidia.com/XFree86/Linux-x86_64 和 Linux-X86 下載 NVIDIA-Linux-xxxx-pkg1.run

分別以 NVIDIA-Linux-xxxx-pkg1.run -x 解壓縮

複製 X86_64 的 NVIDIA-Linux-x86_64-180.16-pkg1/usr/src/nv/nv-kernel.o 到 X86
( 為什麼知道是這個檔?看 make module 他會說 32bit 無法連結到 64bit 於 nv-kernel.o )

修改 Makefile ,尋找 "make CC="
(可於此執行 make module 就會看到他是這樣呼叫 kernel make 的)

改成 "make CROSS_COMPILE=x86_64-pc-linux-gnu-"
( CC=$(CC) 記得刪掉 )

如常執行 ./nvidia-install 即可

ps. 最好先移除之前安裝的 driver

2008年12月19日 星期五

linux flash 中文亂碼 的解決

安裝了flash播放器,播放正常,但中文全是亂碼,解決方法如下:

打開配置文件:
 cd /etc/fonts/conf.d/
sudo vim 49-sansserif.conf

修改edit節點,將<string>sans-serif</string>
改為 <string>sans</string>

<match target="pattern">
        <test qual="all" name="family" compare="not_eq">
            <string>sans-serif</string>
        </test>
        <test qual="all" name="family" compare="not_eq">
            <string>serif</string>
        </test>
        <test qual="all" name="family" compare="not_eq">
            <string>monospace</string>
        </test>
        <edit name="family" mode="append_last">
            <string>sans-serif</string>     <--- <string>sans</string>
        </edit>
    </match>

2008年12月14日 星期日

Linux 下類似 Windows API Hook 的 LD_PRELOAD 技術

Modifying a Dynamic Library Without Changing the Source Code / 在不更動原始程式碼的前提下,修改動態程式庫


如何得知某個 so 有哪些 function call:
readelf -s /lib/libm.so.6
會列出所有 Symbol table in '.dynsym'

2008年12月12日 星期五

linux 中使用 pptp client 連線到windows vpn server 包含 mppe-128 支援

先說一下 Windows VPN ( PPTP ) Server 連線所需要的通訊協定
* 驗證身份使用 MS-CHAP V2
* 加密使用 MPPE
* 壓縮使用 MPPC

要成功建立連線,至少必須支援 MPPE 才行 ( MPPC 似乎選擇性的?? )

安裝所需軟體:
pptpclient
ppp

kernel 必須支援的選項:
CONFIG_PPP
CONFIG_PPP_ASYNC
CONFIG_PPP_MPPE

在 Gentoo 中 ppp 有一個 mppe-mppc 的 USE,如果需要啟動 MPPC 的話才要使用這個 ( not sure !)

設定 ppp
連線模式與帳號密碼
使用 CHAP 認證,修改 /etc/ppp/chap-secrets 依序輸入 "帳號、*、密碼",例如:
username_ppc52776 * password_ppc52776

peer 雛型可先用 pptp-command 建立 ( /etc/ppp/peers/sinica )
然後加入關鍵的一行設定
pty "pptp 140.109.17.129 --nolaunchpppd"
一定要有這行可以正常連線 !!
再加上給該 tunnel 的額外設定
ipparam sinica

之後可以先用
# pppd call sinica logfd 2 nodetach
看看有沒有辦法正常連線
Using interface ppp1
Connect: ppp1 <--> /dev/pts/7
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local IP address 140.109.17.146
remote IP address 140.109.17.141
這樣就表示可以了

測試成功了,往後要連線就可以用
# pon sinica
斷線用
# poff

我的設定檔:
pty "pptp 140.109.17.129 --nolaunchpppd"
lock
refuse-eap (預設會用這個做 auth, 但是現在已經都不能用了)
#require-mschap-v2 (這個要拿掉,不然會變成你要求對方也要跟你認証)
require-mppe-128
name crchang
ipparam sinica

route 設定
編輯 /etc/ppp/ip-up.d/sinica.sh
#!/bin/sh
# $1 = interface name (e.g. ppp0)
# $2 = tty device
# $3 = speed
# $4 = local IP address
# $5 = remote IP address
# $6 = ipparam (user specified parameter, see man pppd)

if [ "$6" == "sinica" ]; then
#vpn server ip 必須還是走本來的 gateway
route add -host 140.109.16.129 gw 192.168.1.10
#屬於中研院網域的 ip 走這個 ppp0 出去而非預設的 eth0
route add -net 140.109.0.0/16 dev $1
fi

ps.
在 Linux NAT 下, 若要用 PPTP 連遠端的 VPN Server,
必需加掛這兩個 pptp module
modprobe ip_nat_pptp (這個似乎不一定要?)
modprobe ip_conntrack_pptp
否則 Windows 在連線時會出現此錯誤:
錯誤 721: 遠端電腦沒有回應。請按 [其他資訊] 或搜尋這個錯
誤碼的說明及支援中心,以取得進一步的協助。
(參考來源:http://pank.org/blog/2008/09/pptp-under-linux-nat.html)

2008年12月3日 星期三

在 firefox 中關聯 ed2k 到 sancho

sancho 是一個連接 mldonkey 下載 p2p 的介面軟體。由於某些原因,firefox 並不能自動把 ed2k 地址關聯到 sancho中.

我們可以手動完成這一工作。 在 firefox 地址欄中輸入 about:config

新建一個Boolean,名字為 network.protocol-handler.external.ed2k,值為 true
新建一個String,名字為 network.protocol-handler.app.ed2k,值為 /opt/bin/sancho
這樣就OK了。這時候點擊一個ed2k鏈接將會出現一個啟動相應應用程序的提示。點擊啟動後, 這個 ed2k 鏈接將會被加入下載隊列。前提是 sancho 必須是已經開啟著的。

如果你想在點一個ed2k鏈接的時候不出現提示,那麼新建一個Boolean,名字為network.protocol-handler.warn-external.ed2k,值為 false

Gentoo Portage 使用小技巧

當使用 Portage 安裝套件時,常常會遇到被 Mask 或是某些 USE 不能使用的窘境
例如 mplayer 的 USE="(-real) 和 realcodecs 整個被 mask
解決方法可以設定 Portage 的行為來強迫使用被 mask 的 package 和 USE

首先說明 /etc/portage 下的設定檔功能:
  • /etc/portage/package.use: 可以設定特定 package 每次安裝時要套用哪些 USE,例如
    app-cdr/k3b -encode -dvdread -mp3 表示安裝 k3b 時都會優先使用後面的 USE 設定
  • /etc/portage/package.mask: 如果你不想安裝某些套件可以在這邊設定
    =media-libs/mesa-7.0.3_rc2 不安裝 mesa-7.0.3_rc2 這個套件
  • /etc/portage/package.unmask: 如果想強迫某個被 mask 的套件來安裝的話再此設定
    =media-video/realplayer-11.0.1.1056-r2 強迫安裝特定版本前面要加 = 的符號
    =media-libs/realcodecs-11.0.1.1056* 後面可以用 *
  • /etc/portage/profile/package.use.mask: 路徑不一樣要注意喔,內容寫法也不一樣!!
    media-video/mplayer -real 這邊 -real 表示要把被 mask 的 real 變成可以安裝
    media-libs/win32codecs -real 這個檔寫法相反請注意
建議要強迫解開被 mask 的套件或 use 的時候最好指定特定版版
因為以後的版本被 mask 的理由可能會變,最好還是 check 一下比較保險
Related Posts Plugin for WordPress, Blogger...