預載 Windows 8 + Ubuntu 12.10 安裝經驗分享

我的環境:Toshiba Portege R930 + 預載的 Windows 8

身為自由軟體愛好者,當然是要裝上 Ubuntu 來試試看。這次安裝花了不少時間,才摸索出來。

原本打算用 wubi 的,但是看到這篇 AskUbuntu 上的問答 ,就發現用 wubi 是不可行的了。問答的二樓建議不要用 wubi,先在win8挪出分割區,到 BIOS 把secure boot 關掉,開機順序改由live cd/usb 開,然後裝上ubuntu 12.10,裝完開機選單找不到 win8 的話,用ppa:yannubuntu/boot-repair去修,這樣大概就沒啥問題。最後去電源選項改成不要快速關機。

基本上我照著步驟做了,但是重新開機時,還是 Windows 8 的 boot loader 起來,根本無從選 ubuntu,也沒得用 boot-repair。後來想說,可不可以像 XP 一樣,改 Windows boot loader 的開機選單就行,於是就下載了 EasyBCD 軟體來改,可是還是不行,之後又重新裝了幾次 Ubuntu 都不行。

直到今天早上,今天早上想說還沒有試過 boot-repair,就用 LiveUSB 開機進去,然後安裝 boot-repair 、執行。boot-repair 會偵測環境然後亮出介面,介面上有個 Advanced Options,點進去一看,這設定還真多,當下就又縮回去,不調整,依照原先介面上的建議進行 repair。基本上 repair 的動作是自動的,直到最後才要你開 terminal 打指令,就依樣打完,重開機,GRUB 的選單就出現了。試著開機到 Windows、Linux 都沒問題,大功告成。

詳細步驟:

  1. 進 Windows 8 的磁碟分割,壓縮原來的 C:\ 以取得空間給 Ubuntu 使用。
  2. 關機,按下關機前,先按下 shift,這樣可以確定是真正的關機。
  3. 開機,按 F2 進 BIOS,將 Secure boot 設為 disabled,修改開機順序,改為由 USB 或 CD 開機。
  4. 用 Ubuntu Live USB/CD 開機,開始安裝,我這邊是採取自行分配,不是交給 Ubuntu 幫我分配,我將在步驟 1 切出來的剩餘空間分為: /boot 256MB,/ 40GB,swap 8GB,然後剩下的都給 /home。
  5. 安裝完成,重新開機,會進 Windows 8。依照步驟 2 關機,然後再以 Live USB/CD 開機。
  6. 進入 Ubuntu 以後,安裝 boot-repair:開啟 terminal,輸入 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update && sudo apt-get install boot-repair -y
  7. 安裝完成以後,執行 boot-repair,我是直接按下上面那個按鈕,也就是依照 boot-repair 的建議進行修復。
  8. 重新開機,大功告成。

參考資料:

  • Ubuntu Document – UEFI

 

xdg-utils, nautilus 與 nemo

因為想知道怎麼把 nautilus 改為 nemo,就開始追代碼了。主要是先從 xdg-open 開始,因為 xdg-open ~ 就可以叫出檔案總管並把位置帶到家目錄。

我忘了是怎麼知道 xdg-open 這指令的了,這指令就相似於 Windows 的 start 指令,Windows 的 start 是這樣,只要打 start xxx.doc 或是 start http://www.google.com.tw 就可以自動打開相應的程式,像 xxx.doc 就會開 MS Word,網址就會開瀏覽器。xdg-open 也是一樣,輸入 xdg-open xxx.doc 就會用 Open Office 或 LibreOffice 開啟 xxx.doc,以此類推。

xdg-open 是由 xdg-utils 所提供,是用 perl 寫的,再看裏面,會發現程式會根據目前的桌面環境來自動決定要呼叫哪個桌面環境的 open 程式來開啟指定檔案或位置。GNOME 就是 gnome-open,KDE 就是 kde-open,XFCE 就是 exo-open,LXDE 就是 pcmanfm,不一樣的情況可能會改呼叫 gvfs-open, kfmclient 等等的。

所以在 GNOME 環境下打 xdg-open 或 gnome-open 是一樣的。那 gnome-open 又是怎麼做到的呢?gnome-open 是收錄在 libgnome 裡,source code 可以在這裡看到 git.gnome.org/browse/libgnome/tree/libgnome/gnome-open.c ,程式很短,就先判斷檔案的位置,然後就呼叫 glib gio 的 g_app_info_launch_default_for_uri 進行啟動。再更深入,就沒有細究了,總之是根據 GNOME 內建的 MIME 對應來得知該使用哪個程式的。

記得有可以編輯 MIME 的程式,就可以去改,但我忘了程式的名字,一時在系統設定裡也找不到。最後是用了 ubuntu-tweak 來做修改,就把 nautilus 改為 nemo 了。

Upgrade Subversion to 1.7 in CentOS5

也忘了是從什麼時候開始,在更新時,就一直遇到 subversion-perl 無法升級的問題,說需要 subversion 1.7,可是 CentOS 裡包的是 subversion 1.6,而這個 subversion-perl 是 rpmforge 提供的。

拖了好久,在更新時都以 –skip-broken 避開,可是日子久了,總是會覺得這樣很麻煩,決定還是設法把 subversion 升級到 1.7。當然自己編譯當然是可以,但上上策當然還是有人打包最好,所以上網搜索了一下,就發現有人問,而答案是利用 WANdisco 提供的 yum repository。WANdisco 比較麻煩的是,如果你要下載,網站會要求你輸入資料,然後才寄給你 .repo 檔案。收到 .repo 檔案,就放在 /etc/yum.repos.d ,接著執行 sudo yum update 就可以了。

wireshark

以前用 wireshark 時,都是直接上 sudo,以 root 權限執行,沒注意提示訊息的說明。這次認真看了,原來是說可以不用以 root 權限執行,那麼該怎麼做呢?首先要使用 sudo dpkg-reconfigure wireshark-common 重新設定,這時候會跳出詢問視窗,問說是不是要在非 root 模式下使用,請選 yes,然後系統群組裡會多出一個 wireshark 群組。接著請把自己加入到 wireshark 群組裡,登出以後再登入,確定自己有在 wireshark 群組裡以後,就可以使用 wireshark ,而不需要有 root 權限了。

Ubuntu第二個螢幕的解析度只有640×480

家裡是用 Ubuntu 12.10,顯卡是用 nVidia GT630,主要螢幕是 ViewSonic 22″,第二個螢幕則是 Dell 17″。都接上去以後,第二個螢幕卻只有 640×480,當然還是可以用,但是就是礙眼,而且很多程式根本不適用於640×480了,操作會很麻煩。

打開 nVidia X Server Settings,想說去設定為高一點的解析度,可是能選的解析度就只能到 640×480。找了 GT630 的規格,原本以為是規格限制,但後來換算了一下,發現應該不是,而且 17″ 應該是要可以跑到 1024×768 才對,再者,以前都沒問題的。後來再用 nvidia gt630 “Virtual screen size” 去找,才在 nVidia 驅動程式的 README 裡找到 MetaModes 這關鍵字。參考了自己原來的 xorg.conf,裏面是這樣寫:Option “metamodes” “CRT-0: nvidia-auto-select +0+0, CRT-1: nvidia-auto-select +1680+0″,仔細研究了好一會兒,牙一咬,心一橫,想說應該是這個沒錯,就調整為 Option “metamodes” “CRT-0: nvidia-auto-select +0+0, CRT-1: 800×600 +1680+0” ,重新啟動就可以讓第二個螢幕到 800×600 了,這時候再打開 nVidia X Server Settings,赫然發現,第二個螢幕的解析度也可以調整了,於是就調整為 1024×768,打完收工。

 

VBoxHeadless 與 3D acceleration

今天用 VBoxHeadless 開 VM 時,出現了這樣的錯誤:

VBoxManage: error: This VM was configured to use 3D acceleration. However, the 3D support of the host is not working properly and the VM cannot be started. To fix this problem, either fix the host 3D support (update the host graphics driver?) or disable 3D acceleration in the VM settings (VERR_NOT_AVAILABLE)

看起來就是要我關 3D 加速選項,查了一下,有找到這篇很有用的導引文,完全在 console 下進行建立、啟動 VM 的動作。在文章裡有看到使用 VBoxManage modifyvm 來變更 vm 選項,所以我就用 VBoxManage modifyvm –help 查了說明,接著就用 VBoxManage modifyvm –accelerate3d off 把 vm 的 3D 給關閉,然後就可以啟動了。這次有學到另外一個可以不用直接使用 VBoxHeadless 的方式,就是一樣用 VBoxManage startvm 來啟動,但加上 –type headless 這樣:VBoxManage startvm “Windows XP” –type headless ,這樣就跟使用 VBoxHeadless 一樣了。

ubuntu 12.04 ia32-libs 無法安裝

約莫半年前,我的桌機從 11.10 升級到 12.04 precise 以後,就沒辦法安裝 ia32-libs,這問題一直卡關,卡到現在才找到解。

安裝的時候,apt 會告訴你:

  • ia32-libs 相依於 ia32-libs-multiarch
  • ia32-libs-multiarch 相依於 bluez-alsa:i386
  • bluez-alsa:i386 相依於 bluez:i386
  • bluez:i386 相依於 python-dbus-dev:i386
  • 族繁不及備載…bala…bala…

有發現有人提報了這個問題,也有人貼到討論區上討論,但是都沒解。

其實主要問題是卡在 bluez 上面,後來用 bluez:i386 ia32-libs-multiarch 這幾個關鍵字去找,就找到:Solving ia32-libs installation problem in Ubuntu 12.04 precise pangolin ,然後就照著他的方法去做,順利解決了問題。

他的方法是這樣子的:

  1. 移除 ia32-libs 跟 bluez 等相關套件:sudo apt-get remove bluez ia32-libs
  2. 安裝 ia32-libs-multiarch:i386 :sudo apt-get install ia32-libs-multiarch:i386
  3. 安裝 ia32-libs :sudo apt-get install ia32-libs

是故,現在可以用 google earth,也可以編譯 Android 4.x 了。

 

avant-window-navigator 設定檔位置

Ubuntu 12.04 用的是 0.4.x ,設定檔主要是放在 HOME 目錄下,有兩個地方:

  • ~/.config/desktop-agnostic ,這邊主要是 .ini,各個 applet 的設定都在這裡。
  • ~/.config/awn ,這邊主要是 launcher (*.desktop)、themes..等等的。

原本以為改改 .ini ,就可以順利回復到上次的設定,豈料不行,所以還是乖乖手動自己加 task launcher…囧。

用imagemagick合併圖片

今年年初時買了 Canon 的事務機,裡面有掃描的功能,所以就開始了掃描大公子作品的計畫。大公子都是畫在那種大大張的日曆紙上面(約為A3大小),掃描時,就需要折半來掃描(折半就是A4)。可是折半掃描為圖檔以後,到了電腦就要合成,之前都是利用繪圖軟體,像 paint.net 或 gimp,先把畫布尺寸擴大為兩倍,再把第2張圖貼上,這樣很花時間,調整起來也很麻煩。

處理了幾次之後,終於受不了了,想說應該有好用的工具可以一次搞定。之前知道有 imagemagick,就用 imagemagick cat image 丟下去找,看到 cat 了嗎? 會用 cat 是因為想到 linux 下有個好用的 cat 指令,一般可以用這個把兩個檔案串到一起,然後用 pipe 輸出到新檔案。但是 cat 就是貓啊!!! 所以找到了一堆跟貓照片有關的文章。@_@

找著找著,終於發現自己的錯誤,應該要用 merge 啊!!! 於是就找到了 montage 這個指令,這個其實就包在 imagemagick 套件裡,用法是這樣子的:montage 1.jpg 2.jpg -tile 1×2 -geometry +0+0 output.jpg ,這樣就可以把兩張圖接起來,一張在上面,一張在下面。如果要左右接,就把 -tile 拿掉即可。

awk的split

朋友問我,有沒有可以把 fg_list_partial.png 轉成 fg.list_partial 的指令,我是隔天才收到訊息,而他已經用 echo filename | cut -d “.” -f 1 | sed ‘s/_/./1’ 來解決問題了。

我看到訊息時,立馬想到的是 basename/awk ,而不是 sed/cut,所以我用 echo `basename fg_list_partial.png .png ‘{printf(“%s.%s_%s\n”, $1, $2, $3);}’ 來解,可是仔細想想,其實有缺點,第一個是多花一個指令去把檔名的副檔名去掉,第二個是不適合做大量的批次處理。因此我再仔細找了一下,看 awk 有沒有支援 multiple field separator,找著找著,反而看到了 split,這個也可以喔。最後我用 echo “bg_list_full.png” | awk -F . ‘{split($1,a,”_”);printf(“%s.%s_%s\n”,a[1],a[2],a[3]);}’ 來解決,這個方法除了少了 basename 指令之外,也很適合做批次處理,例如 ls ??_list_*.png | awk -F . ‘{split($1,a,”_”);printf(“%s.%s_%s\n”,a[1],a[2],a[3]);}’ 。