2013/03/31

Remote Desktop 和 Desktop Sharing

這兩個應用很接近,不小心就會混淆。

Remote Desktop 是遠端桌面。也就是在某 PC 上登入並獨自擁有一份遠端主機的桌面,就像你用本地的螢幕鍵盤來登入和操控本地主機的桌面一樣。譬如,你家裡電腦開著,然後在辦公室連回家裡,看到的是和在家裡時一樣的登入畫面。從登入、操作到登出,這個 session 都是你自己在進行。一台主機,通常允許建立很多的遠端桌面,大家各作各的,不會有衝突。

Desktop Sharing 則是桌面分享。也就是你已經登入某一台主機之後,開放權限讓遠端另一個人也可以看到或操作你的桌面。通常這是為了解決某些問題,譬如你不會安裝某個軟體,請遠端的朋友代勞。桌面只有一份,所以要先講好某個時間由誰操作,不然會亂成一團。

Ubuntu 上的 Remote Desktop,server 端可以安裝 xrdp/vnc4server (背景執行),client 則用 tsclient/rdesktop (應用程式 > 網際網路 > 終端伺服器客戶端)。

Ubuntu 上的 Desktop Sharing,server 端可以用 vino-server (系統 > 設定 > 遠端桌面),client 則用 vingare (應用程式 > 網際網路 > 遠端桌面檢視器)。

2013/03/20

修改 xterm 的 title

我是 Gnome Terminal 分頁的重度使用者,往往一開就是十多個分頁。有些在不同工作目錄編輯文件;有些可能在用 gdb 除錯;有些連到其他主機做編譯之類的任務。這樣非常方便,但有一個很大的困擾:經常找不到想去的分頁。

Gnome Terminal 分頁預設以使用者+主機+工作目錄當作 title。乍看之下,似乎可以達到某個程度的分辨功能,但一來相似度太高,二來分頁一多 title 就只剩下前面相同的部份。因此,到後來只能憑腦袋記憶分頁位置。無奈,年紀越大,記憶就越不靈光...

以下介紹解決這個問題的方法:自訂 xterm 的 title (只針對 bash 來介紹,其他 shell 可能能需要些微調整)。

修改 title 的指令為:
echo -ne "\033]0;NEW TITLE\007"
若你當場測試,八成會說我騙你。請再試試以下指令:
echo -ne "\033]0;NEW TITLE\007"; read
第一個指令看起來無效的原因是因為 bash 在完成你的指令之後,馬上又將他改掉了。第二個指令多加一個 read,就是為了讓你看清楚。利用這個特性,內容如下的 ~/bin/vi 在你用 vi 編輯 hello.c 時分頁 titile 會是 "vi hello.c",讓你一目了然:

#!/bin/bash
echo -ne "\033]0;vi $*\007"
/usr/bin/vi $*
同樣的方法,你可以應用到 gdb、adb、minicom 等等。

順道一提,每次在 bash shell 執行完指令就會設定一次 titile,這個動作是設定在 .bashrc 的以下段落:
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
注意 PS1 定義。其中 \e 和 \a 相當於前面指令的 \033 和 \007、\u 是使用者名稱、\h 是主機名稱、\w 是工作目錄。切換目錄時 title 會跟著改,就是因為 \w 的關係。\w 用在 prompt 很好,但當作 title 就太長了,建議用 \W 當 title,也就是整個路徑的最後一個目錄名稱。

參考資料

2013/03/13

用 vim 調整 tab 和空白混合的程式碼

之前的筆記提過混合 tab 和空白造成 coding style 混亂的問題和建議解法:
在你決定好 coding style 之後,還是要面對一個問題:如何將 tab 和空白已經混亂的程式碼調整好?

方法一是用 Artistic Style 之類的程式碼美化軟體重新編排。這種方法的優點和缺點是重新編排的範圍包含縮排和斷行方式,甚至運算子和括號前後是否需要加上空白等等。若只想針對 tab 和空白做調整,這方式是有風險的大手術。

方法二是利用 vim 半人工轉換。此方法適合縮排大致正確,只需處理 tab 和空白的情況。以下,簡單介紹這個方法。
  1. 首先,請 設定 vim 分別顯示 tab 和空白字元,這樣你才能清楚分辨。
  2. 參考本文一開始介紹的兩篇文章,設定好你理想的 tab 字元處理方式。
  3. 瀏覽你的程式碼,確認縮排位置是否正確,有錯就修正。注意!只看位置,不管 tab 和空白是否混淆。
  4. 然後,執行 vim 的 ":retab" 指令就可按照你的設定重新調整 tab 和空白了 (記得存檔)。若你 coding style 的縮排是用空白字元,也就是這次調整你要將 tab 轉成空白,以上方法可達到完美的程度。但,若你決定以 tab 字元縮排,以上方法會保留不含 tab 的連續空白 (安全起見),不一定每個地方都轉換到。若你確定要全改,用 ":retab!" 指令即可。



2013/03/12

在 Ubuntu 上安裝字型

我對字型的要求不高,只要夠用就好,但有時不得不需要安裝一些新字型。譬如,拿到一份重要的 PDF 文件,因為缺字型的關係,Acrobat Reader 上文字變成小黑點無法閱讀。我直覺是少了 A 字型,用相近的預設 B 字型取代不就好了?但似乎沒有這麼簡單,因為找不到這種設定方法。

有一種解法是上傳到 Google Doc,從 Google Doc 閱讀。若想要在 PC 上閱讀,就只能新增該種字型了。以下是 Ubuntu 安裝字型的方法:
  1. 先取得字型檔。以個人下載兩個字型的經驗,FontZone 字型不少,下載也很方便。
  2. 執行以下命令將字型複製到預設目錄,並讓字型生效 (亦可參考網友 Han-Pei Lin 的留言):
    sudo cp FONT-DOWNLOADED /usr/share/fonts/truetype
    sudo fc-cache -f -v

2013/03/10

讓 vim 顯示 tab 和行末的空白字元

之前的筆記提過混合 tab 和空白造成 coding style 混亂的問題和建議解法:
以上的解法要團隊共同遵守才有效,但我們經常需接手其他作法不同的團隊的程式。因 tab 和空白都以空白顯示,要分辨原來團隊的作法並不容易。

以下是讓 vim 顯示 tab 和行末空白字元的指令:
set listchars=eol:$,tab:>.,trail:~,extends:>,precedes:<
set list
這種設定會以一般的「大於」和「句點」等一般符號來表現 tab 和行末空白。若怕會混淆,可以試試以下的特殊符號 (至少在 Ubuntu 上可用):
set listchars=eol:↵,tab:»·,trail:╳,extends:»,precedes:«
set list
建議將此指令加在 `~/.vimrc`,當成預設組態。這樣,每次用 vim 時 tab 都會有特別的顯示方式,而看起空白的就是真的空白 (行末的空白除外),很容易分辨。用以下指令就可暫時取消這種顯示方式:
set nolist
有些人可能希望空白也能有不同的顯示方法。方法如下:
highlight Whitespace cterm=underline gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
autocmd ColorScheme * highlight Whitespace gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
match Whitespace /  \+/
參考資料: