Extend virtual machine disk size, enlarge filesystem

If you select “use entire disk and use LVM" during Ubuntu installation, the installer will use a weird disk topology:

  1. /boot on the first primary partition, sda1
  2. extended partition on sda3
  3. LVM partition on sda5

Super weird. So in order to enlarge the filesystem I decided to simply create a new partition and add it to LVM.

Quick notes on using fdisk:

fdisk /dev/sda
p
n
p
3
first sector is the end sector of the extended partition+1
reboot

Add sda3 to LVM, extend VG, extend LV, extend filesystem.

pvcreate /dev/sda3
vgextend xx-vg /dev/sda3
lvextend -l 100%FREE /dev/xx-vg/root
resize2fs /dev/xx-vg/root

ibus-pinyin 使用 OpenCC 地區用字轉換

ibus-pinyin 對於臺灣使用者有個很麻煩的地方是它在輸入繁體模式的時候會出現很奇怪的用字,譬如「羣」和「衆」這兩個字在臺灣習慣的寫法是「群眾」。

trace ibus-pinyin 好久老是找不到它到底是怎麼做繁簡轉換的……

最後發現是利用 libpyzy ,libpyzy 本身看起來有一些基本的轉換功能,但在 Ubuntu 的套件裡面看來是會直接呼叫 OpenCC (套件名稱是 libopencc1)。

OpenCC 其實有支援地區習慣用字的轉換,從簡體字可以轉到臺灣或是香港的習慣用字。但是從原始碼macro 的定義看起來不會做地區用字轉換。

opencc_open 函數接受轉換設定檔的檔名,轉換設定檔的檔名在 Ubuntu 下可以去 /usr/lib/x86_64-linux-gnu/opencc/ 找到(附檔名 ini)。

那接下來我要做的事情就很簡單了,把

m_od = opencc_open (OPENCC_DEFAULT_CONFIG_SIMP_TO_TRAD);

改成

m_od = opencc_open ("zhs2zhtw_vp.ini");

然後重編套件、打包就行了。

套件檔在這

Inconsistent tray icons in 3rd-party icon sets

I switched to Moka icon theme, the icons are beautiful, but I find their system tray icons somewhat inconsistent with the Unity system tray. (or taskbar)

moka_system_tray

In order to fix this, I edited /usr/share/icons/Moka/index.theme , in Inherits= line , add ubuntu-mono-dark ,like this:

Inherits=ubuntu-mono-dark,Faba,gnome,hicolor

This still wouldn’t fix the Bluetooth icon, I deleted the bluetooth icons in Moka so that it would fallback to ubuntu-mono-dark:

cd /usr/share/themes/Moka
find ./ -name "*bluetooth*" | xargs rm

My end result:

ubuntu-mono-tray

Linux (Ubuntu) 的音效架構

筆電內建麥克風一直不能用的的問題困擾了我許久,爲了這個問題我已經總共耗費掉不下10小時,前幾天我下定決心,既然之前亂槍打鳥都沒辦法解決問題,乾脆就趁這次把 Linux 的音效架構弄清楚。這篇是(稍微)瞭解 Linux 音效架構之後所做的筆記。

在現代的 Linux 當中,音效的處理主要經過4層架構,通常 kernel 和應用程式比較難去改變,因此本文着重說明 ALSA 和 PulseAudio :

  1. 硬體 (Kernel)
  2. ALSA: ALSA 負責比較低階的溝通工作,如辨識音效卡以載入正確驅動模組、辨識晶片、低階硬體資訊(如取樣率)、辨識插孔(普通 3.5mm 的插孔、SPDIF)、偵測插孔的拔插
  3. PulseAudio: 在比較高階的地方整合各應用程式所要輸入、輸出的音訊,並進行混音(好像某些情況下混音是由 ALSA 操控混音晶片負責?)。可以將它視爲音訊 proxy ,夾在應用程式與 ALSA 之間。他也可以將音訊轉送至網路給遠端的 PulseAudio 負責輸出。應用程式若要進行音訊輸入/輸出都會先連接到 PulseAudio ,所以 PulseAudio 能夠個別控制每個音訊輸入/輸出程式的音量。Ubuntu 預設的音量調整就是去調整 PulseAudio 的音量。(PulseAudio 的音量會與 ALSA 的聯動,這我不是非常清楚)
  4. 應用程式

介紹一些術語:

  • 混音 Mix:將來自不同音源的音訊疊加在一起輸出至喇叭
  • 混音器等級:基本上就是音量的意思
  • 立體聲 Stereo :應該就是2聲道的意思(左聲道與右聲道)
  • 單聲道 Mono :大部分麥克風都是單聲道
  • PCM : http://alsa.opensrc.org/Pcm-device
  • 接頭 Connector :在美國常稱爲 jack ,就是指一個插孔
  • 音效卡 Sound card :大部分電腦的音效卡已經與南橋整合,所以音效卡型號基本上就是南橋型號
  • 音效晶片 Sound chip :實際負責音效的晶片,內建 CODEC 功能
  • CODEC :數位訊號(電腦或其他數位裝置)與類比訊號(喇叭、麥克風)的轉換
  • AC‘97 : 我一直以爲這是音效卡的型號,原來他是 Intel 訂定的音效卡規範
  • HDA (High Definition Audio) : 也是 Intel 訂定的規範,取代了 AC97
  • Sink : Pulseudio 當中一個輸入或一個輸出稱作一個 sink

參考:http://alsa.opensrc.org/Sound_Cards:_Introduction

ALSA 需要載入各種 kernel module 以正確運作,module 的選項有時也會影響,modprobe -l 列出目前所載入的 kernel module ,其中 snd 開頭的就是音效相關模組。如果你的音效(輸入和輸出)完全不能用,調整 /etc/modprobe.d/alsa-base.conf 這一行的 model 選項說不定可以修好(這應該只對 Intel 南橋有用)

options snd-hda-intel model=acer enable=1 index=0

設定值的清單

我遇到的狀況是調成 acer 之後音效輸入和輸出就都能用了。

奇怪的是 Google Hangout 和 Skype 的音效輸入卻都不能用,儘管 gnome-sound-recorder 完全正常。

arecord -f dat -r 96000 -D hw:0,0 /tmp/test.wav
這行指令是直接從 ALSA 進行錄音,跳過 PulseAudio ,所以可以判別 ALSA 是否能夠收到聲音。其中 -r 是取樣率,如果設定錯誤的話它會警告「警告:速率不準確 (需要的是 60000Hz,現在的是 96000Hz)」,後面的那個 96000Hz 纔是正確你的設備支援的速率(中文翻譯怪怪的 Orz),-D hw:0,0 是指定要從哪一個裝置錄音,可以用 arecord --list-devices 取得正確的硬體編號。

parec -d alsa_input.pci-0000_00_1b.0.analog-stereo | sox -t raw -r 44k -sLb 16 -c 2 - /tmp/test1.wav
則是從 PulseAudio 錄音,裝置 (sink) 是 alsa_input.pci-0000_00_1b.0.analog-stereo (從名稱可以看出來訊號來源是來自 ALSA),要從哪一個裝置錄音呢?用 pactl list 看,要找的是 Source #1 這種的段落,裏面的名稱就是了,不要找結尾有 .monitor 的。

alsamixer 可以調整 ALSA 所有裝置的音量

pavucontrol 可以調整 PulseAudio 所有裝置的音量,他的設定值會影響 alsamixer

後來 G+ 和 Skype 麥克風不能用的問題是用神奇的方法解決掉了…

很多相關問題的除錯參考資料:

臺灣人使用拼音輸入的問題

好吧,必須承認,使用拼音輸入的臺灣人真的並不多。

那爲什麼我要用拼音輸入呢?說來話長啊……

起因在於我想要試用 Dvorak 鍵盤排列,關於 Dvorak ,請看這篇

我剛換到 Dvorak ,就發現 ibus 新酷音(注音)輸入法(ibus-chewing )根本不支援 Dvorak 鍵盤。於是我又下定決心換到拼音輸入。

等我把拼音輸入弄熟,大概又是兩個禮拜之後的事了。

剛開始用的時候,熟悉羅馬拼音最花時間,還有一些拼音完全拼不出來(這個待會再提)。

臺灣用的拼音系統五花八門,每個人用的習慣都不一樣。像是清音與濁音的差異(/p/ 與 /b/ 、/t/ 與 /d/ 等等),臺灣幾乎是混用的像是「臺北」我們拼成 Taipei ,可是在拼音輸入法裏面要拼成 Taibei 才打得出來。以ㄓ爲例,就有好多不同的拼法:

  • 漢語拼音:/zh/
  • 注音二式:/j/
  • 通用拼音:/jh/
  • 威妥瑪拼音:/ch/
  • 耶魯拼音:/j/

大陸統一使用漢語拼音,臺灣也已經「規定」使用漢語拼音,但是人名、地名若已經使用其他的拼音方法,則沿用。像是 Taipei 就是一個例子。我也發現,臺北捷運已經全面使用漢語拼音了。

這邊再列出那時候我查了一下才知道要怎麼打的字:

  • 兇:xiong
  • 封:feng
  • 唉:ai
  • 囉:luo
  • 歐:ou
  • 破:po
  • 切:qie
  • 二:er
  • 帥:shuai

漢語拼音熟悉到一定程度之後,中文打字的速度應該就可以比用注音還快了,像是「這樣可以嗎」我只要打「zhykym」就好了(每一個字的聲母),而且詞庫還頗豐富的,一些少見的語句也可以這樣打出來:「孺子可教也」=「rzkjy」。

另外一個很棒的功能就是快速的中英切換,在 ibus-chewing 底下,要按 CapsLock 才能切換中文、英數模式,在 ibus-pinyin 中只要直接照打(不用切換),打完直接按 Enter ,剛剛打的就會被當作英文直接出來(如果按數字鍵就可以選中文詞語)。不過,如果不切換,英文的標點符號就打不出來,所以有時候還是要按 Shift 切換英數模式/中文模式。有了這個功能,要打中英文夾雜的句子就非常方便。

再來就要提到幾個不方便的地方了。

首先就是,有一些字的漢語拼音非常奇怪,像是「率」:lü ,「女」: nü 。這些字很難打出來。有人提出幾種解決方案:

  1. 用 lyu 替代,可是萬一我要打「領域」,這個詞的拼音也可以簡寫成「lyu 」啊,會有問題
  2. 用漢字沒有的發音的符號來代替,像是 v (好像也只有 v ),所以「率」:「 lv 」。缺點是非常不直覺

ibus-pinyin 選擇第二個方案。可是,身爲一個剛剛學拼音輸入法不久的人,誰知道要用 v ?不管我查什麼字典,它都寫 lyu 、lü 或是 lu: 。根本就想不到要用 v 。這也是我學拼音輸入兩個月之後才會的東西(也就是前幾天啦)。

還有,拼音輸入本來大概就是設計給大陸人用的,所以雖然有「繁體模式」,可是有一些字形與臺灣慣用的字形還是不一樣,以下左邊的是拼音輸入繁體模式的字形,右邊的是臺灣人慣用的字形:

  • 爲:為
  • 綫:線

印象中還有很多,一時想不起來,以後想到再更新。

我有把第二個問題回報給 ibus-pinyin 的開發者,不過他似乎很忙,我又不會寫 code ,真是麻煩……

Problems about /dev/mapper/cryptswap1 on Karmic

Recently I always get a error mounting /dev/mapper/cryptswap1 when booting. I heard that it was because Ubuntu is trying to mount the swap even before it is created. I added these two lines to /etc/rc.local and the problem is solved.

swapoff -a

swapon -a

Although the error no longer occurs, I still don’t understand why would this happen.