iT邦幫忙

5

Linux Pi的奇幻旅程(8)-VNC

沒有畫面, 只能跳針被叫姐姐.

上一篇: Linux Pi的奇幻旅程(7)-設定(續)
http://ithelp.ithome.com.tw/question/10131094
下一篇: Linux Pi的奇幻旅程(9)-VNC(續)
http://ithelp.ithome.com.tw/question/10132217
全部: http://ithelp.ithome.com.tw/ironman6/player/bizpro/alll/1
前文介紹了Raspberry Pi可以透過HDMI和S-Video端子將畫面輸出到顯示器或電視上, 如果接到電視, 需要鍵盤與滑鼠等輸入裝置, 不是很方便, 還需要USB轉接器, 如果是接到顯示器, 也必需有一台專屬的顯示器或使用KVM來切換. 除了圖形化界面(GUI)的輸出外, 還有文字界面, 也就是用ssh來登入Raspberry Pi, 透過文字介面來學Linux還是最方便的, 在我對客戶的日常維護中, 用ssh來登入遠端的系統甚是便利, 這是加密的通道, 也較安全. 今年初讀過一篇報導, 一位美國的父親, 裝了一台文字界面的Linux給他四歲左右的女兒用, 直到一年多後, 父親買來一隻滑鼠, 再裝上xorg圖形系統(加上GNOME), 女兒驚訝不已, 原來電腦可以有美美的圖形畫面的, 這也就是說, 文字界面並不可怕, 而有圖形界面也是不錯的選擇, 因此, 就給使用Raspberry Pi的Linux初學者一個圖形界面吧, 這也是第三種取得Raspberry Pi輸出畫面的簡便方式, 也就是安裝tightvnc. 在安裝 tightvnc之前, 先將系統更新一次:

$ sudo apt-get update
$ sudo apt-get upgrade

apt-get是apt系統的一隻主要的程式, 而apt是Debian系統的高階包裝工具(Advanced Packing Tools, apt), Debian/Ubuntu維持了預先編譯好的軟體資料庫, 可以使用apt-get update來聯繫這些資料庫以取得資料庫的軟體更新訊息, 然後再用apt-get upgrade來更新本地電腦中的軟體, 這樣的軟體更新方式很是方便與安全. 有關APT的簡介請參考: http://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8C%85%E8%A3%85%E5%B7%A5%E5%85%B7

如果許久未更新Raspbian系統, apt-get upgrade可能會花一些時間, 在更新完後, 就可以用apt-get install來開始安裝tightvnc:

pi@raspberrypi ~ $ sudo apt-get install tightvncserver
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
xfonts-base
Suggested packages:
tightvnc-java
The following NEW packages will be installed:
tightvncserver xfonts-base
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 6967 kB of archives.
After this operation, 9988 kB of additional disk space will be used.
Do you want to continue [Y/n]?

按下Y鍵之後, 系統開始安裝tightvncserver了, 並加裝xfonts-base, 如上面的粗體字所顯示的, 程式apt-get會檢查apt資料庫, 下載並安裝tightvncserver, 結果將類似:
Setting up tightvncserver (1.3.9-6.4) ...
update-alternatives: using /usr/bin/tightvncserver to provide /usr/bin/vncserver (vncserver) in auto mode
update-alternatives: using /usr/bin/Xtightvnc to provide /usr/bin/Xvnc (Xvnc) in auto mode
update-alternatives: using /usr/bin/tightvncpasswd to provide /usr/bin/vncpasswd (vncpasswd) in auto mode
Setting up xfonts-base (1:1.0.3) ...
可以清楚的看到安裝了什麼與做了什麼, 如果安裝過程有錯誤, 就要處理錯誤了,然而一般上, apt都做的很好, 很少會有錯誤的.

如果這是讀者第一次在Linux上安裝程式, 不是很難吧. 大部份的情況也就只有三個命令:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install <要安裝的系統>

一般上也只需第三個命令, 另外, 命令也可以這樣下:

$ sudo apt-get install tightvncserver -y
參數-y的是按鍵[Y]的意思, 也就是不必去按一個[Y]鍵, 這對自動化的安裝很是方便.

安裝好Tight VNC Server之後, 就準備好第一次啟動, 系統會要求輸入一存取桌面的密碼和一個唯讀的密碼:

pi@raspberrypi ~ $ tightvncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:

New 'X' desktop is raspberrypi:1

Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

這是對Tight VNC Server的初始設定, 這些設定會存放在使用者的家目錄, 家目錄通常是/home/{使用者}, 以使用者pi為例, 家目錄就是/home/pi, 另一個表現家目錄的特殊字元是'~', 例如, 對使用者pi而言, 以下兩個命令的結果都是切換到使用者pi的家目錄:
$ cd /home/pi
$ cd ~
這也是在提示命令提示處pi@raspberrypi ~ $中的~. 也就是說, 命令提示處的構造是
使用者@主機名稱 所在目錄$, 以上面的命令提示為例, 使用者pi處在(@)主機raspberry的目錄~中.

接下來, 有一種特殊的目錄, 目錄名稱的第一個字元是句號'.', 這表示是隱藏檔案/目錄, 以tightvnc為例, 第一次執行命令tightvncserver之後, 有一個目錄/home/pi/.vnc會被創建, 用來儲存關於Tight VNC Server的設定檔與相關資料. 這個目錄中的內容可能如下:

pi@raspberrypi ~ $ ls -ls ~/.vnc
total 16
4 -rw------- 1 pi pi 16 Sep 30 13:32 passwd
4 -rw-r--r-- 1 pi pi 681 Sep 30 13:32 raspberrypi:1.log
4 -rw-r--r-- 1 pi pi 5 Sep 30 13:32 raspberrypi:1.pid
4 -rwxr-xr-x 1 pi pi 225 Sep 30 13:32 xstartup

檔案passwd顧名思義就是存放剛剛所設定的密碼的資訊. 而raspberrypi:1.pid是一個值得介紹的檔案, :1是檔名的一部分, 也表示這是編號為1的螢幕, 這個檔案的結尾是pid, 是Process ID的簡稱. 看看這個檔案中有什麼:
pi@raspberrypi ~ $ cat ~/.vnc/raspberrypi\:1.pid
2398
就一個數字而已, 這個數字表示是tightvncserver這個程序(process)的ID了. 用這個數字來找出這個程序:

pi@raspberrypi ~ $ ps aux|grep 2398
pi 2398 0.6 2.4 14284 11076 pts/0 S 14:10 0:15 Xtightvnc :1 -desktop X -auth /home/pi/.Xauthority -geometry 1024x768 -depth 24 -rfbwait 120000 -rfbauth /home/pi/.vnc/passwd -rfbport 5902 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb
pi 3231 0.0 0.1 3516 764 pts/0 S+ 14:49 0:00 grep --color=auto 2398

看起來很複雜, 其實就是執行Xtightvnc這個指令, 加上一些參數, …, 不對, 剛剛下的指令是tightvncserver吧? 看起來tightvncserver應該是一個可執行的腳本(bash), 在Windows的世界中, 檔案的副檔名不僅是可用來分別檔案的類型, 而且是有特殊意義的, 例如.exe, .msi, 和.bat都是可執行檔, 但是Linux/Unix可不一樣, 副檔名是沒有特殊意義的, 一個檔案是否是可執行檔, 是由其檔案屬性決定的, 重要的是, 像tightvncserver是沒有副檔名的, 如何從檔案屬性知道它是可執行檔? 首先要先找到它. Linux有趣的地方是, 很多的命令是直白的英語, 看看下面的命令就知道了:

pi@raspberrypi ~ $ whereis tightvncserver
tightvncserver: /usr/bin/tightvncserver /usr/bin/X11/tightvncserver /usr/share/man/man1/tightvncserver.1.gz

由命令whereis, 哪裡是, 找出tightvncserver的完整路徑為/usr/bin/tightvncserver, 接下來就看看其屬性:
pi@raspberrypi ~ $ ls -ls /usr/bin/tightvncserver
20 -rwxr-xr-x 1 root root 19655 Jun 12 2012 /usr/bin/tightvncserver
可以看到在-rwxr-xr-x中有三個x, 表示使用者, 群組, 和其他使用者都有執行tightvncserver的權限. 至於這些的詳細觀念留待之後在詳述. 以下列出簡單的解釋:
r表示read, 讀, 也就是可以開啟檔案的權限
w表示write, 寫, 也就是可以寫入檔案的權限
x表示execute, 執行, 也就是這個檔案具有可執行的權限.

找到tightvncserver之後, 這檔案的確是腳本(bash), 內容很長, 但我們的目的是要解釋為什麼真正執行的命令是Xtightvnc? 這裡用一個小技巧:

pi@raspberrypi ~ $ cat /usr/bin/tightvncserver |grep Xtightvnc

uncomment the line below. Note that in this case Xtightvnc's .Xauthority

$cmd = "Xtightvnc :$displayNumber";

Give Xtightvnc a chance to start up

warn "Couldn't start Xtightvnc; trying default font path.\n";
warn "Couldn't start Xtightvnc process.\n\n";
"<OPTIONS> are Xtightvnc options, or:\n".
"See vncserver and Xtightvnc manual pages for more information.\n");
"You'll have to kill the Xtightvnc process manually\n\n";
warn "Killing Xtightvnc process ID $pid\n";
foreach $cmd ("uname","xauth","Xtightvnc","vncpasswd") {

命令cat是catenate的簡寫, 也就是表明出檔案的內容, 接著在cat /use/bin/tightvncserver之後, 接著一豎, 表示是將列出的tightvncserver內容交給grep這個命令去抓取相關資訊, 在這裡用grep Xtightvnc就是試著要抓是否在檔案tightvncserver中有Xtightvnc字串的出現, 上面的輸出結果表示是有的. 這時可以合理的猜測, 的確是用了Xtightvnc命令, 至於怎麼用, 就要分析tightvncserver這個腳本了.


1 則留言

我要留言

立即登入留言