<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- Translate into Chinese by ijliao@dragon2.net -->
<!-- English Version: 1.10 -->

  <sect>
    <heading>X Window System 及 Virtual Consoles<label id="x"></heading>

    <sect1>
      <heading>我想要執行 X ，我該怎麼做？</heading>

      <p>最簡單的方法就是在安裝系統的時候一併安裝。

      <p>然後看看 <htmlurl url=
      "http://www.FreeBSD.org/cgi/man.cgi?manpath=xfree86&amp;query=xf86config"
      name="xf86config 的 man page"> ，這個程式可以幫您設定 XFree86(tm) 使它
      能夠使用您的顯示卡/滑鼠等週邊。

      <p>您或許也想試試看 Xaccel server。詳情請看 <ref id="metrox"
      name="Metro Link"> 或是 <ref id="xig" name="Xi Graphics"> 這一段。

    <sect1>
      <heading>為什麼我不能在 X 裡使用滑鼠？<label id="x-and-moused"></heading>

      <p>如果您用的是 syscons (內定的 console 驅動程式) 的話，您可以經由設定
      FreeBSD 來讓它支援在每個 virtual console 使用滑鼠。為了避免和 X 產生衝
      突，syscons 使用了一個叫做``<tt>/dev/sysmouse</tt>''的虛擬裝置。所有滑
      鼠產生的 event 都會利用 MouseSystems 這個協定來傳到 sysmouse 這個裝置
      。如果您希望在一個或以上的 virtual console 上使用滑鼠，<bf/並且/ 能夠
      使用 X 的話，我們建議您這樣設定：

      <verb>
        /etc/rc.conf:
          moused_type=ps/2          # or whatever your actual type is
          moused_port=/dev/psm0     # or whatever your real port is
          moused_flags=

        /etc/XF86Config
          Section Pointer
              Protocol "MouseSystems"
              Device   "/dev/sysmouse"
              .....
      </verb>

      <p>有些人比較喜歡在設定 X 的時候用 "<tt>/dev/mouse</tt>" 這個裝置。如
      果您要讓它能夠正常工作的話，您就必須把 "<tt>/dev/mouse</tt>" 連結到
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?sysmouse"
      name="/dev/sysmouse">：

      <verb>
        # cd /dev
        # rm -f mouse
        # ln -s sysmouse mouse
      </verb>

    <sect1>
      <heading>X Window 的選單和對話框不能正常運作！</heading>

      <p>把 Num Lock 關掉試試。

      <p>如果您的 Num Lock 在開機時的預設值是開著的話，您必須把下列這行放到
       <tt/XF86Config/ 設定檔中的 "<tt/Keyboard/" 部份。

      <verb>
        # Let the server do the NumLock processing.  This should only be
        # required when using pre-R6 clients
            ServerNumLock
      </verb>

    <sect1>
      <heading>什麼是 virtual console？我要怎麼做才能用多一點？</heading>

      <p>簡單來說，virtual console 就是可以讓您不必做太多複雜的設定如使用網
      路或執行 X ，而在同一臺機器上同時做好幾件事的方法。

      <p>當啟動系統並顯示完所有開機訊息之後，您就會在螢幕上看到一個 login 的
      提示符號。在這個時候您就可以輸入您的 login name 以及 password ，然後就
      可以在第一個 virtual console 上開始工作了 (或者開始玩！) 。

      <p>在某些情況下，您可能會想要作其他的工作，例如說是看看您正在執行的程
      式的說明文件，或是當您在 FTP 傳輸的等待時間中看看您的郵件。您只需要按
      Alt-F2 (按住 Alt 鍵不放，並按下 F2 鍵) ，然後您就會在第二個 "virtual
      console" 上看到一個 login 提示符號！當您想要回到原來的工作時，請按
      Alt-F1。

      <p>FreeBSD 在安裝時的預設值是使用三個 virtual console ，您可以用
      Alt-F1，Alt-F2，以及 Alt-F3 在它們之間做切換。

      如果您想要多一點 virtual console 的話，您只需要編輯 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?ttys" name="/etc/ttys"> 這個檔
      ，在 "Virtual terminals" 這個註解後面加入 "<tt/ttyv4/" 到 "<tt/ttyvc/"
      的欄位：

      <verb>
        # Edit the existing entry for ttyv3 in /etc/ttys and change
        # "off" to "on".
        ttyv3   "/usr/libexec/getty Pc"         cons25  on secure
        ttyv4   "/usr/libexec/getty Pc"         cons25  on secure
        ttyv5   "/usr/libexec/getty Pc"         cons25  on secure
        ttyv6   "/usr/libexec/getty Pc"         cons25  on secure
        ttyv7   "/usr/libexec/getty Pc"         cons25  on secure
        ttyv8   "/usr/libexec/getty Pc"         cons25  on secure
        ttyv9   "/usr/libexec/getty Pc"         cons25  on secure
        ttyva   "/usr/libexec/getty Pc"         cons25  on secure
        ttyvb   "/usr/libexec/getty Pc"         cons25  on secure
      </verb>

      <p>您想用幾個就設幾個。您設越多 virtual terminal ，它們就用掉越多系統
      資源；如果您只有不到 8MB 的記憶體的話，這影響就大了。您可能也會想把
      "<tt/secure/" 換成 "<tt/insecure/" 。

      <p><bf/IMPORTANT NOTE/ 如果您想要執行 X 的話，您 <bf/必須/ 為它保留 (
      或關掉) 至少一個 virtual terminal 。這就是說，如果您想在按十二個 Alt
      功能鍵時都有 login 提示符號，而且又在同一部電腦上也想執行 X 的話，那麼
      這真是太不幸了 - 您只能用十一個。

      <p>取消一個 console 最簡單的方法就是把它關掉。舉例來說，如果您像上面講
      的一樣設定了全部的 12 個 terminal 並且想要執行 X ，您必需把 virtual
      terminal 12 從：

      <verb>
        ttyvb   "/usr/libexec/getty Pc"         cons25  on secure
      </verb>

      <p>設成：

      <verb>
        ttyvb   "/usr/libexec/getty Pc"         cons25  off secure
      </verb>

      <p>如果您的鍵盤只有 10 個功能鍵的話，您就要改成這樣：

      <verb>
        ttyv9   "/usr/libexec/getty Pc"         cons25  off secure
        ttyva   "/usr/libexec/getty Pc"         cons25  off secure
        ttyvb   "/usr/libexec/getty Pc"         cons25  off secure
      </verb>

      <p>(您也可以直接把這幾行砍掉。)

      <p>一旦您改了 <htmlurl 
      url="http://www.FreeBSD.org/cgi/man.cgi?ttys" name="/etc/ttys">，
      下一個步驟就是要確定您有足夠的 virtual terminal 裝置。最簡單的方法就是：

      <verb>
        # cd /dev
        # ./MAKEDEV vty12                 # For 12 devices
      </verb>

      <p>再過來，想要啟動這些 virtual console 最簡單 (也是最乾淨) 的做法就是
      重開機。然後，如果您不想重開機的話，您可以把 X Window 關掉，然後用
      <tt/root/ 的身份執行下列指令：

      <verb>
        kill -HUP 1
      </verb>

      <p>當您執行這個命令前，您一定要完全把 X Window 關掉。如果您不這麼做的
      話，您的系統可能會在您執行 kill 命令後出現當掉或鎖死的情況。

    <sect1>
      <heading>我要怎麼從 X 切換到 virtual console？</heading>

      <p>如果您螢幕上正在顯示 X Window 的話，您可以用 Ctrl-Alt-F1 等按鍵來切
      換到 virtual console 。注意，一旦您從 X Window 切換到任一個 virtual
      console 之後，您就可以只用 Alt- 功能鍵來切換到其他 virtual terminal 或
      是切回 X Window 。您不必同時按著 Ctrl 鍵。如果在比較舊的版本中您用
      Ctrl 鍵來切回 X Window 的話，您會發現您的文字螢幕被卡在 "control-lock"
      模式下。您只需要再按一次控制鍵就可以恢復原狀。

    <sect1>
      <heading>我要怎麼做才能在開機時啟動 XDM？</heading>

      <p>有兩種方法可以啟動 <htmlurl url=
      "http://www.FreeBSD.org/cgi/man.cgi?manpath=xfree86&amp;query=xdm"
      name="xdm"> 。一種方法是從
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?ttys"
      name="/etc/ttys"> 來啟動，可以參考 man page 中的範例；另一種方法是在
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?rc" name="rc.local">
      執行 xdm ，或是在 <tt>/usr/local/etc/rc.d</tt> 放一個 <tt/X.sh/ 。這兩
      種方法都是合法的，如果您試某一種方法無效的話，您可以試試另外一種。這兩
      種方法的結果是一樣的：X 會顯示一個圖形化的 login: 提示。

      <p>用 ttys 的方法的優點，在於指明了 X 在啟動時到底是用那個 vty，並且將
      logout 時重新啟動 X server 的責任丟給 init。 rc.local 的方法則是在當啟
      動 X 出了問題時，可以很輕鬆地把 xdm 殺掉來解決問題。

      <p>如果是用 rc.local 的方法，在執行 <tt/xdm/ 時您不能加任何參數（也就
      是跑成 daemon）。必須在 getty 執行後才能啟動 xdm，否則 getty 和 xdm 會
      互相衝突而鎖住 console。最好的方式是在 script 中加個 sleep，讓它暫停
      10 秒鐘左右，接著才執行 xdm。

      <p>前一版的 FAQ 說您必須把您想讓 X 使用的 <tt/vt/ 加到
      <tt>/usr/X11R6/lib/X11/xdm/Xservers</tt> 檔裡去。這是不必要的：X 會自
      動使用第一個找到的可用 <tt/vt/ 。

    <sect1>
      <heading>當我執行 xconsole 時，發生了 "Couldn't open console" 的錯誤</heading>

      <p>如果您是用 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?manpath=xfree86&amp;query=startx"
      name="startx"> 來啟動 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?manpath=xfree86&amp;query=X"
      name="X"> 的話，/dev/console 的權限並不會改變，結果就是 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?manpath=xfree86&amp;query=xterm"
      name="xterm -C"> 和 <htmlurl url=
      "http://www.FreeBSD.org/cgi/man.cgi?manpath=xfree86&amp;query=xconsole"
      name="xconsole"> 這類的程式無法正常執行。

      <p>這一切的問題，都是因為 console 的權限是採用系統預設值。在一個多使用
      者的系統裡，我們不希望每個使用者都可以直接寫入系統 console 。如果使
      用者是從機器的 VTY 直接 login 的話，那麼
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?fbtab" name="fbtab">
      可以解決這類的問題。

      <p>簡單地說，請確保
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?fbtab(5)"
      name="/etc/fbtab"> 這個檔案中的這一行沒有被註解掉：

      <verb>
        /dev/ttyv0 0600 /dev/console
      </verb>

      這一行設定的存在可以確保從 <tt>/dev/ttyv0</tt> 登入的使用者可以控制
      console 。

    <sect1>
      <heading>我的 PS/2 滑鼠在 X 中有點不正常</heading>

      <p>您的滑鼠和您的滑鼠驅動程式可能存在有不同步的現象。

      <p>在 2.2.5 以及更早的系統裡，從 X 切到 virtual terminal 然後再切回來
      就可以使它們重新做同步的動作。如果這個問題常常發生的話，您可以在您的
      核心設定檔中加入下面這個選項然後重新編譯：

      <verb>
        options PSM_CHECKSYNC
      </verb>

      <p>如果您沒有建立核心的經驗，請看
      <ref id="make-kernel" name="建立核心"> 這一節。

      <p>加上這個選項以後，滑鼠和滑鼠驅動程式間的同步問題應該就比較不會出現
      了。如果這個問題仍然存在的話，在移動滑鼠時按按滑鼠按鍵可以使滑鼠和滑
      鼠驅動程式重新做同步的動作。

      <p>該注意的是這個選項並不是對每一個系統都有效，它可能會讓接在 PS/2 滑
      鼠位置的 ALPS GlidePoint 裝置失去 "tap" 這項功能。

      <p>在 2.2.6 及其後的版本，同步的確認已經有了較好的解決辦法，而且這些都
      已經是 PS/2 滑鼠驅動程式的標準了。這個方法也可以在 GlidePoint 上正常工
      作。 (因為確認的程式碼已經成為一個標準功能，所以在這些版本中我們不在提
      供 PSM_CHECKSYNC 的選項了。) 不過在極少數的案例中，這些驅動程式會誤報
      同步性錯誤，然後您就會看到這樣的核心訊息：

      <verb>
        psmintr: out of sync (xxxx != yyyy)
      </verb>

      然後您就會發現您的滑鼠不能正常運作了。

      <p>如果您發生了這樣的狀況，您必須藉由把 PS/2 滑鼠驅動程式的 flag 設成
      0x100 來把同步確認的程式碼給取消掉。然後在開機提示符號時用
      "<tt>-c</tt>" 選項來進入 <em>UserConfig</em>：

      <verb>
        boot: -c
      </verb>

      然後，在 <em>UserConfig</em> 的命令列中鍵入：

      <verb>
        UserConfig> flags psm0 0x100
        UserConfig> quit
      </verb>

    <sect1>
      <heading>我的 PS/2 滑鼠不能透過 MouseSystem 來運作</heading>

      <p>有一些報告指出某些廠牌的 PS/2 滑鼠只能在 "高解析度" 狀態下才能運作
      。如果不是的話，滑鼠游標會常常跑到螢幕的左上角去。

      <p>非常不幸的，這個問題在 2.0.X 和 2.1.X 下是無解的。在 2.2 到 2.2.5
      版，您可以對 <tt>/sys/i386/isa/psm.c</tt> 使用下列 patch 然後重建您的
      核心。如果您沒有建立核心的經驗，請看
      <ref id="make-kernel" name="building a kernel"> 這節。

      <verb>
diff -u psm.c.orig psm.c
@@ -766,6 +766,8 @@
     if (verbose >= 2)
 	log(LOG_DEBUG，"psm%d: SET_DEFAULTS return code:%04x\n",
 	    unit，i);
+    set_mouse_resolution(sc->kbdc，PSMD_RES_HIGH);
+
 #if 0
     set_mouse_scaling(sc->kbdc); 	/* 1:1 scaling */
     set_mouse_mode(sc->kbdc);		/* stream mode */
      </verb>

      <p>在 2.2.6 及以後的版本，在 PS/2 滑鼠驅動程式中設定 0x04 的 flag 會
      把滑鼠設成高解析度模式。在開機提示符號時用 "<tt>-c</tt>" 選項來進入
      <em>UserConfig</em>：

      <verb>
        boot: -c
      </verb>

      然後，在 <em>UserConfig</em> 的命令列中鍵入：

      <verb>
        UserConfig> flags psm0 0x04
        UserConfig> quit
      </verb>

      <p>前一節有提到另一個可能導致滑鼠問題的原因。

   <sect1>
    <heading>當我建立 X 程式時，<tt/imake/ 說它找不到 <tt/Imake.tmpl/ 。它在那？
    </heading>

    <p>Imake.tmpl 是 Imake 套件的一部份，Imake 是標準的建立 X 程式的工具。
    Imake.tmpl 和其他數個 header file 一樣是建立 X 程式的必要檔案，您可以在
    X prog distribution 中找到它們。您可以用 sysinstall 來安裝或是直接從
    X distribution 中手動安裝。

  </sect1> 

  <sect1>
   <heading>我要怎麼做才能設定左撇子用的滑鼠？
   </heading>
 
   <p>在您的 .xinitrc 或是 .xsession 中執行
   <tt/ xmodmap -e "pointer = 3 2 1"/ 的指令。
   </p>
  </sect1>

  <sect1>
   <heading>要如何安裝 splash 圖形顯示程式？那裡可以找得到呢？
   </heading>

   <p>就在發行 FreeBSD 3.1 之前，我們加進了在開機時顯示 &quot;splash&quot;
   圖形的新功能。目前用來顯示在螢幕上的檔案必須是 256 色的點矩陣圖形
   （<tt>*.BMP</tt> 、或 ZSoft PCX（<tt>*.PCX</tt> 的格式。除此之外，解析
   度也必須在 320x200 以下，才能和標準 VGA 顯示卡搭配使用。如果您編譯
   kernel 時有加入 VESA 支援，那麼最大解析度可以到 1024x768。注意 VESA 的
   支援需要加入 <tt>VM86</tt> 這個 kernel 選項。VESA 支援實際上可以在編譯
   kernel 時加入 <tt>VESA</tt> 選項、或載入 VESA 的 kld module 來達成。

   <p>您要修改控制 FreeBSD 開機步驟的設定檔，才能使用 splash 顯示圖形的功
   能。設定檔在發行 FreeBSD 3.2 前有些更動，所以現在有兩個方法可以載入
   splash 的功能：
      
   <itemize>
     <item>FreeBSD 3.1

      <p>先選出用來顯示在螢幕上的圖形，3.1 版只支援 Windows 的點矩陣格式。
      選好了您要的圖檔後，將它拷到 <tt>/boot/splash.bmp</tt>。接著把下面幾
      行加入 <tt>/boot/loader.rc</tt> 中：

      <verb>
          load kernel
          load -t splash_image_data /boot/splash.bmp
          load splash_bmp
          autoboot
      </verb>
     </item>

     <item>FreeBSD 3.2 以後的版本

      <p>除了加入對 PCX 檔案的支援外，FreeBSD 3.2 也改進了開機程序的設定
      方式。如果您願意的話，可以用上述 FreeBSD 3.1 的方法，將
      <tt>splash_bmp</tt> 換成 <tt>splash_pcx</tt> 來載入 PCX 檔案即可。
      如果想用新的設定方式，您的 <tt>/boot/loader.rc</tt> 必須包括這幾行：

      <verb>
          include /boot/loader.4th
          start
      </verb>

      <p>並且 <tt>/boot/loader.conf</tt> 也要包括這幾行：

      <verb>
          splash_bmp_load="YES"
          bitmap_load="YES"
      </verb>
                 
      <p>這是假設您用 <tt>/boot/splash.bmp</tt> 來當作 splash 的螢幕顯
      示。如果想用 PCX 的檔案，將它拷成 <tt>/boot/splash.pcx</tt>，如上
      述做出 <tt>/boot/loader.rc</tt>，再將這幾行加到
      <tt>/boot/loader.conf</tt> 中：

      <verb>
          splash_pcx_load="YES"
          bitmap_load="YES"
          bitmap_name="/boot/splash.pcx"
      </verb>
     </item>
   </itemize>

   <p>現在就只剩下 splash 用來顯示的圖檔，您可以在 <htmlurl
     url="http://www.cslab.vt.edu/~jobaldwi/splash/"
     name="http://www.cslab.vt.edu/~jobaldwi/splash/"> 找到各種樣品.</p>

  </sect1>
  </sect>
