經常須要用到遠端服務器的圖形工具,若是在windows端沒用xserver的話,不少程序沒法運行。一個特殊的例子,emacs在沒用xserver的時候,是直接在終端中打開的,若是不修改cygwin.bat文件。
廢話少說,下載安裝cygwin的x11相關包。裝完後,在C:\cygwin\usr\X11R6\bin下有個startxwin.bat文件,註釋掉 %RUN% xterm -e /usr/bin/bash -l 這一行。之後每次點開此腳本文件,就不用彈出煩人的xterm了,而xserver會自動最小化在系統托盤。
可是每次都要手工點這個批處理腳本,很麻煩,因而想辦法寫入cygwin.bat中隨着cygwin的終端一塊兒運行。不過又有一個問題,在啓動cygwin以後,若是關閉shell,那麼xserver是還在運行的,下次在打開這個腳本,會彈出xserver已運行的錯誤。因而須要增長一個判斷:若是xserver已運行,則不調用startxwin.dat腳本,不然調用。
可是問題又來了,加了此判斷以後,若是xserver已啓動,在關閉shell以後再從新打開shell,發現emacs又從新在shell內打開,而不是彈出窗口,bug?
因而修改對判斷的處理:若xserver已運行,則殺掉該進程。這樣,無論xserver在不在運行,運行cygwin.bat腳本時都會調用startxwin.dat腳本,emacs等程序也都沒用問題了:)
修改以後的cygwin.bat腳本以下:
@echo off
set CYGWIN=binmode tty ntsec
C:
for /f %%i in ('tasklist') do if /i %%i==XWin.exe (taskkill /IM XWin.exe /F)
call C:\cygwin\usr\X11R6\bin\startxwin.bat
chdir C:\cygwin\bin
bash --login -i
第二行是防止在shell中打開的無窗口的emacs沒法退出。第四行是判斷是否含有xserver的進程並處理,第五行是調用startxwin.dat腳本。
在通過這麼一次折騰以後,發現就連dos的批處理都這麼牛逼,可想linux的shell有多強大了,要好好學習shell編程!!!