Linux 及其相關分類文章 顯示方式:簡文 | 列表

November 5,2009

gwibber 的 spell 問題

如果你用 gwibber 時,碰到下面錯誤的話,這是因為沒有中文的 aspell 資料檔的關係:
File "/usr/lib/python2.6/dist-packages/gwibber/gwui.py", line 455, in __init__
    self.spell = gtkspell.Spell(self, None)
glib.GError: enchant error for language: zh_TW.UTF-8
解法很簡單,修改 /usr/lib/python2.6/dist-packages/gwibber/gwui.py 把 455 行的前後加上 exception handling 即可:
try:
  self.spell = gtkspell.Spell( self, None )
except:
  pass
修改時要注意縮排問題,python 對這點可是很講究的!

Posted by elleryq at 樂多Roodo!10:22回應(0)引用(0)
標籤:linux,python

October 15,2009

解決 opera 10 不能用 ibus 問題

環境:
Ubuntu 9.10
Opera 10
輸入法:ibus

解決方法:
編輯 /usr/bin/opera,在 OPERA_BINARYDIR 之下加上
export QT_IM_MODULE=XIM
,然後重新啟動就行了。

Posted by elleryq at 樂多Roodo!10:59回應(0)引用(0)
標籤:Ubuntu,linux,opera

October 14,2009

grub 從不是第1個硬碟開機

我承認,這標題下的很爛,但一時也想不到更好的。

情況是這樣的,我第一個硬碟已經裝了 Linux,這時候我卻想裝 Windows,是故,我只能裝在第二個硬碟上。Windows 非常機車,如果第一個硬碟沒有 NTFS 的 partition 是不給你裝的。這時候只能先拔第一個硬碟的電源,把 Windows 裝到第二個硬碟上之後,再重新把第一個硬碟的電源裝回去。

接下來,因為不想老是在 BIOS 裡切換開機順序,所以把腦筋動到 grub 上。根據 grub 的 manual,只要利用 map 就行了,但我還是試了好一陣子,後來才發現是順序的問題,我試的時候把 map 放到最前面去了。正確的順序是這樣的:
title		Windows XP
root		(hd1,0)
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader	+1

這樣就可以不用在 BIOS 裡切換開機順序了。如果你不是用第二個硬碟,而是第3個或第四個硬碟,只要類推為 hd2、hd3 即可。

Posted by elleryq at 樂多Roodo!0:05回應(0)引用(0)
標籤:Ubuntu,linux

October 12,2009

wine 的選單

我用的是 Ubuntu。

用 wine 安裝程式以後,Wine 選單裡會多出該程式的項目,但移除程式以後,這些項目還存在,即便你之前有備份 .wine,將備份檔案回存了,也不會有用。關鍵在於 wine 其實是把這些選單項目放在 $HOME/.config/menus/applications-merged 下,所以只要把該刪除的項目從這個資料夾下刪除即可。

2009/10/14 補充:$HOME/.local/share/applications/wine/Programs 下的也要記得刪掉,否則會出現在"其他"選單裡...

Posted by elleryq at 樂多Roodo!16:56回應(0)引用(0)
標籤:Ubuntu,linux

October 2,2009

Mustek Bearpaw 1200TA in Ubuntu

如果你正好用的掃描器跟我一樣是 Mustek BearPaw 1200TA 或者是開啟 xsane 遇到 gt68xx:libusb 錯誤時,你可以試著到這裡:SANE GT68xx Backend Homepage 去下載適當的 .usb 檔案。下載以後,把它複製到 /usr/share/sane/gt68xx 目錄下,變更權限為 a+r,然後重新開啟 xsane,這樣就能正常使用掃描器了。

Posted by elleryq at 樂多Roodo!11:35回應(0)引用(0)
標籤:Ubuntu,linux

July 28,2009

在 Ubuntu 9.04 使用 svk 出現 Can't locate Time/Progress.pm

在公司正想用 svk 把 monodevelop source code 拉回來時,發現有 Can't locate Time/Progress.pm 訊息,然後就停止運行了。
Launchpad 找了一下,發現已經有人回報了:Bug #317487 in svk (Ubuntu): “2.2.1 needs Time::Progress”,後續的回覆裡,也提供了好幾個 workaround,我選擇直接修改 Notify.pm,因為以後 apt-get upgrade 時,新檔案會把舊檔案覆蓋掉。

Posted by elleryq at 樂多Roodo!16:48回應(0)引用(0)
標籤:Ubuntu,linux,svk

May 15,2009

kernel 怎麼執行 hotplug?

因為只知道 hotplug 這關鍵字,直接以 hotplug 找,從 lib/kobject_uevent.c 裡可以看到放 "/sbin/hotplug" 的變數:uevent_helper。再往後找,可以看到 call_usermodehelper 使用了此變數。

call_usermodehelper 定義在 kmod.h 裡,是一個 static inline function。裡面則呼叫了 call_usermodehelper_setup 去設置環境,末了再呼叫 call_usermodehelper_exec 去執行。

p.s. 似乎不能在 IRQ 中斷處理常式裡去呼叫,會造成 kernel crash 掉,仔細想想,這樣有合理,因為 IRQ 中斷處理常式應該要盡早處理結束。如果是這樣,處理就比較麻煩了,可能就要利用 thread 跟 queue 來作。現階段,先不要作這個好了,雖然主動通知的功能很酷...

Posted by elleryq at 樂多Roodo!17:13回應(0)引用(0)
標籤:linux,c

April 21,2009

ecryptfsd

ecryptfs-utils 裡的 ecryptfsd 可以透過 netlink 或 misc 方式與 kernel 的 ecryptfs module 溝通,Ubuntu 有修改過 kernel 的 ecryptfs ,讓 ecryptfsd 以 misc 的方式溝通。

而我,就卡在這裡搞了好久,因為我始終用 kernel 的預設值,也就是 netlink 的方式。
照理來說,netlink 應該也是可以才對,只是在 ecryptfsd 裡有段 code(嚴格來說應該是 libecryptfs.so),在以 sendto 送出封包以後,檢查回傳值,如果大於 0 ,就當作錯誤。你可以查一下 sendto 函式的說明,裡面清楚地寫了,當傳送成功,會回傳 sendto() 所送出的 byte 數。ecryptfsd 以 sendto 送出了 16 bytes,收也收到了 16 bytes,這樣應該是要當作成功,但程式裡卻視為失敗。
我不知道修正這裡以後還會遇到什麼問題,所以我決定很鴕鳥地去改用 ubuntu 的 kernel ...

Posted by elleryq at 樂多Roodo!20:34回應(0)引用(0)
標籤:linux

April 17,2009

直接設定密碼免提示輸入

用 passwd 設定密碼是免不了要回答提示問題的,有方法可以省掉嗎?
如果可以省掉,在大量設定密碼的情況下會很方便。

方法說穿了很簡單,先用 mkpasswd 產生密碼,再用 usermod 來變更使用者密碼。
以下節錄自 call useradd and passwd through no prompt script - LinuxQuestions.org
#!/bin/bash
## Set a default password and perform a password reset
l_user=$1
if [ "$l_user" != "" ]
then
   l_password="Reset"
   l_encrypted_pass=$(mkpasswd -s --hash=md5 ${l_password})
   echo "/usr/sbin/usermod -p ${l_encrypted_pass} ${l_user}"
fi

感恩啦!本來已經想用 sed/awk 去硬改 passwd/shadow 檔案了說...

Posted by elleryq at 樂多Roodo!15:08回應(0)引用(0)
標籤:linux

April 15,2009

TPM 與 ecryptfs

基本都是參考:

另外遇到問題可以參考 IBM 的 troubleshooting,最近 IBM 不知道是網站改版還怎樣,之前留的網址都失聯了,你可以用 ibm ecryptfs troubleshooting 去 google 找。

下面的步驟最好全部以 root 或 sudo 來執行:
  1. 進 BIOS 把 TPM clear 掉
  2. 我的環境正好是用 infineon 的,所以用 modprobe tpm_infineon,一般好像是用 tpm_tis 就行了。
  3. 啟動 trousers:tcsd -f,不用 -f 的話,會掛...這個 daemon 提供 tspi 服務並且與 TPM device 溝通。
  4. 取得 ownership:tpm_takeownership ,這個步驟裡,SRK password 跟其後的 Confirm password 不要輸入!!否則要回到步驟 0 重設。SRK 是 Storage Root Key 的縮寫,不使用密碼保護的原因是為了 ecryptfs 取用方便。
  5. 掛載 ecryptfs:modprobe ecryptfs
  6. 啟動 ecryptfsd
  7. 產生 UUID:ecryptfs-generate-tpm-key -p 1 ,這個 UUID 是提領 key 用的,實際的 key 會透過 PCR 1 的 key 來取得(如果我沒理解錯的話)。


至此,準備工作已經完成,接下來就是操作,這裡我假設 private 是放置要加密的資料的地方:
  1. 先建立:mkdir private
  2. 進行掛載:mount -t ecryptfs private private
  3. 依序回答問題,第一個先選 tspi,第二個問題(cipher)選 aes,第三個問題(key bytes)選 16 bytes,第四個問題(passthrough)選 n,最後問題照預設值。第一個問題是加密方式,你也可以使用其他方式,但這樣就用不到 TPM 了;cipher 跟 key bytes 可以視需要自行調整。這樣就能 mount 上,mount 以後,ecryptfs 會把 UUID 存到 keyring (用 keyctl show 可以看 keyring 內容)裡。


在 private 資料夾裡的操作,基本上不能複寫,只能複製、貼上,但 vim 可編輯。

umount 之前,最好先輸入 mount,把參數記下。
umount 之後,可以直接以參數來掛載,這樣就不用再次回答問題:mount -t ecryptfs -o sig=UUID,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n private private
參數裡,有個 sig,這個 sig 就是填 UUID,不過你輸入 mount 時,看到的卻不是 UUID,而是一個較短的字串。這字串其實是一個提領 UUID 的鑰匙,ecryptfs 會用這個鑰匙去 keyring 裡(用 keyctl show 可以看到),取出 UUID,再以 UUID 去掛載。keyring 主要存放在 kernel 的某個地方,所以重開機以後就會消失,我還不知道怎麼把 keyring 內容存起來。

好吧,以上就是我這幾天跟 TPM 奮戰的紀錄...

Posted by elleryq at 樂多Roodo!11:24回應(0)引用(0)
標籤:linux,tpm
 [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [最終頁]