Cygwin

อัดรูปดิจิตอล ทำสมุดภาพของคุณเอง
รอรับได้. ท่องเที่ยว แต่งงาน ฯลฯ

www.tanabutr.co.th/photobook


PS1

ปรกติใช้เชลล์ไปก็ไม่ค่อยได้ตั้งค่า PS1 เท่าไรนักเพราะคิดว่ามันดีอยู่แล้ว. PS1 เป็นตัวแปรสภาพแวดล้อมสำหรับตั้งแค่พรอมต์ (prompt) โดยปรกติพรอมต์ของ bash ทั่วๆไปก็จะเป็น

poonlap@colinux:~$ 

คือชื่อล็อกอินตามด้วยเครื่องหมาย @, ชื่อโฮสคั่นด้วยเครื่องหมาย : และชื่อไดเรกทอรีที่ทำงานอยู่. ลอง echo ดูก็จะเห็นเป็น

xterm ใน cygwin, UTF-8 กับฟอนต์ TrueType ภาษาไทย

วันนี้ได้ทำอะไรบางอย่างกับข้อมูลที่เก็บอยู่ใน MySQL เป็นภาษาไทยลงรหัสแบบ UTF-8. เวลาทดสอบผมก็ใช้ xterm ที่มีอยู่ใน cygwin เป็นตัวทดลอง. มันเป็นความเคยชินอย่างหนึ่งคือปรกติจะเปิด terminal ของ cygwin ซึ่งเหมือน command prompt ไว้ตัวหนึ่งแล้วเรียก xterm ตามมาใช้อีกตัว. แล้วก็จาก xterm ตัวนี้แหละที่ใช้ ssh ต่อไปที่เครื่องลินุกซ์เครื่องอื่นซึ่งอาจจะเป็น colinux หรือเครื่องลินุกซ์จริงๆ (พูดเหมือนกับว่า colinux เป็นลินุกซ์ปลอม).

แป้นพิมพ์ภาษาไทยใน XWin

ปรกติชอบใช้ dia เขียน flow chart. และช่วงนี้ก็ใช้วินโดวส์เสียเป็นส่วนใหญ่เลยเอา dia ที่รันบนวินโดวส์มาใช้ แล้วก็เจอปัญหาว่ามันไม่เสถียร memory allocation error บ้างทำให้สิ่งที่วาดๆไปหายไปกับสายลม. เลยนึกได้ว่าน่าใช้ dia ที่อยู่ใน coLinux ซึ่งมันต้องเสถียรกว่าอยู่แล้วเพราะเป็นต้นตำหรับ. แต่ก็เจอปัญหาเรื่องแป้นพิมพ์ภาษาไทย.

coLinux ตอนที่ 5 - service ใน Windows

แต่ก่อนก็รัน coLinux จากบรรทัดคำสั่ง มันค่อยข้างน่าเบื่อหน่ายนะต้องย้ายไดเรกทอรีไปที่ c:\colinux แล้วก็สั่งคำั่ง colinux-daemon.exe -c default.colinux.xml. ไปอ่าน blog ของ Satoru Takahashi (Namazu search engine) เขาก็ใช้ coLinux เหมือนกันและบอกว่า coLinux แบบเป็นเซอร์วิสบนวินโดวส์ที่มันเนียนมากๆ เหมือนกับว่ามีลินุกซ์อยู่อีกเครื่องที่ใดที่หนึ่งโดยที่ไม่รู้สึกขัดๆเลย. ผมลองใช้ coLinux ให้เป็นเซอร์วิสบนวินโดวส์ก็นานพอควรแล้วก็ต้องขอบอกว่าจริง เนียนมากๆ เปิดเครื่องวินโดวส์มาก็ได้ลินุกซ์เปิดเครื่องขึ้นมาด้วย. พอจะใช้ลินุกซ์ก็เปิดเทอร์มินอลของ cygwin แล้ว ssh เข้าไป. พออยากใช้โปรแกรมที่เป็นแบบกราฟิกก็แค่ตั้ง DISPLAY ให้ส่งหน้าต่างมากที่ XWin ซึ่งผมก็ทำเป็นเซอร์วิสไว้ด้วย. ถ้าต้องการคอนโซลของ coLinux ก็ดับเบิ้ลคลิ้กที่ colinux-console-fltk.exe.

จัดการเอกสาร TIF แบบคำสั่งๆ

หลายครั้งที่ผมพบว่าตัวเองต้องมาจัดการเอกสารแบบคำสั่งๆ เมื่อวานก็สแกนเอกสาร A4 ที่ละแผ่นๆแล้วเก็บด้วยฟอร์แมต TIF เผื่อเอามาปรินต์ใหม่ไม่ต้องมีเครื่องถ่ายเอกสาร. ก็ลองสแกนด้วยความละเอียดต่างๆตั้งแต่ 75x75 dpi (dot per inch) ซึ่งใช้สำหรับแสดงผลบนหน้าจอคอมพิวเตอร์ จนถึง 600x600 dpi ซึ่งมักจะใช้พิมพ์เอกสารซึ่งก็เห็นชัดว่าเวลาเอามาพิมพ์อีกที 600x600 dpi ก็โอเคแล้ว.

อินสตอลล์ coLinux

หลายวันก่อนเขียนไปแล้วว่ามีหลายวิธีที่จะรันลินุกซ์บนวินโดวส์ และหนึ่งในนั้นคือใช้ coLinux.

พูดง่ายๆ coLinux คือโปรแกรมวินโดวส์ที่สามารถรันตัวลินุกซ์เคอร์เนลที่ได้รับการปรับแต่งมาแล้ว. มันจะต่างกับ VMware หรือ QEMU ซึ่งโปรแกรมพวกนั้นจะจำลองการทำงานของหน่วยประมวลผล ฯลฯ. สรุปคุณสมบัติคร่าวๆได้ว่า

XWin.exe as Windows service

หมู่นี้ใช้วินโดวส์กับ cygwin และ coLinux (จะเขียนในอีกไม่นานวัน) วันนี้ก็เกิดไอเดียว่าน่าจะรัน X เซิร์ฟเวอร์ของ cygwin ซึ่งก็คือ XWin.exe เป็นเซอร์วิสของวินโดวส์ซะเลย. เวลาสตารท์เครื่องก็จะได้ไม่ต้องมาสั่ง startx หรือ XWin ให้วุ่นวาย. ลองหาทางเน็ตดูก็ไม่มีใครเขียนไว้แต่พอจะมีบอกใบ้ว่าใน cygwin นี้มีคำสั่ง cygrunsrv.exe เป็นคำสั่งที่ลงทะเบียนโปรแกรมใน cygwin เช่นเซิร์ฟเวอร์ apache, postmaster ฯลฯ ให้เป็นเซอร์วิสในวินโดวส์. มันก็น่าจะลงทะเบียน XWin.exe ให้เป็นเซอร์วิสในวินโดวส์ได้เหมือนกัน.

ก็เลยลองดูเลยเปิดหน้าจอ bash ของ cygwin ออกมา, แล้วดูว่า cygrunsrv มันใช้อย่างไร

$ man cygrunsrv
No manual entry for cygrunsrv

ไม่เป็นไร, เรารู้ว่าคำสั่งที่ดีควรมีตัวเลือก --help อยู่ด้วยก็ลองดูต่อไป

$ cygrunsrv --help | less

พยายามจับมันเข้าไปในเพจเจอร์ less แต่สิ่งที่ออกมามันเป็น stderr อย่างนี้ต้องเอาใหม่อีกรอบ

$ cygrunsrv --help 2>&1 | less

Usage: cygrunsrv [OPTION]...

Main options: Exactly one is required.
  -I, --install   Installes a new service named .
  -R, --remove    Removes a service named .
  -S, --start     Starts a service named .
  -E, --stop      Stops a service named .
  -Q, --query     Queries a service named .

Required install options:
  -p, --path      Application path which is run as a service.

Miscellaneous install options:
  -a, --args          Optional string with command line options which
                            is given to the service application on startup.
  -c, --chdir    Optional directory which will be used as working
                            directory for the application.
  -e, --env      Optional environment strings which are added
                            to the environment when service is started.
                            You can add up to 255 environment strings using
                            the `--env' option.
                            Note: /bin is always added to $PATH to allow all
                            started applications to find at least cygwin1.dll.
....

มีตัวเลือกให้เยอะแยะ แต่เราใช้ไม่กี่ตัวหรอก. ตัวอย่างเป็นคำสั่งรุ่นเก่า คำสั่งรุ่นใหม่จะมี -L สำหรับดูเซอร์วิสที่บันทึกด้วย. เราก็เริ่มบันทึก XWin ให้เป็น Windows service ด้วยคำสั่ง

$ cygrunsrv -I xwin -d "Cygwin XWin server" -p /usr/X11R6/bin/XWin  -a "-multiwindow -clipboard -ac" -c /usr/X11R6/bin

ถ้าไม่มี error อะไรก็เป็นอันเรียบร้อย.

-I ระบุชื่อเซอร์วิส

-d ใส่คำอธิบาย

-p ใส่ชื่อพาธของโปรแกรมที่ต้องการรัน

-a อาร์กิวเมนต์ของโปรแกรม ตรงนี้ก็ใช้ multiwindow ให้มันไม่แสดง root window, -clipboard ให้มัน cut & paste กับวินโดวส์ได้, -ac ปล่อยให้มันเปิดรับคำขอจากไคลเอ็นต์เครื่องอื่นๆได้ อันนี้จะเอาไว้ใช้กับ coLinux

-c เปลี่ยนไดเรกทอรีไปที่ /usr/X11R6/bin เท่าที่ทดสอบมามันมี .dll ที่ต้องการอยู่เลยใช้ตัวเลือกนี้ด้วย.

ใจร้อนก็อยากสตาร์ทเซอร์วิสนี้เลยก็ได้, ใช้คำสั่งของวินโดวส์ net start, net stop

$ net start xwin
The Cygwin XWin server service is starting.
The Cygwin XWin server service was started successfully.

มันบอกว่าเซอร์วิสเริ่มแล้ว ก็ลอง

$ export DISPLAY=:0
$ xlogo 

ไม่ขึ้น!!! ปรกติถ้ารัน XWin -multiwindow ด้วยมือมันจะมีไอคอน X เล็กๆที่ system tray. แต่ตรงนี้ไม่มี. มั่วๆอยู่นานเลยรู้ว่าต้องไปเป็นเซอร์วิสของวินโดวส์, คลิ้กขวา My Computer เลือก manage... ไปที่ services

ดับเบิ้ลคลิ้กตรงเซอร์วิสที่สร้าง, ไปที่แท็บ Log on แล้วเลือก "Allow service to interact with desktop".

อินสตอลล์ cygwin

ต่อจากเรื่องใช้ลินุกซ์ในวินโดวส์ที่เขียนไปแล้ว. คราวนี้จะมาว่าด้วยเรื่องการติดตั้ง cygwin ซึ่งก็เป็นการปูทางใช้ coLinux ได้ง่ายขึ้นแถมได้ bash และเครื่องมืออื่นๆใช้ในวินโดวส์ด้วย.

ขั้นตอนการติดตั้งก็ไม่ยากอะไร, ไปที่ http://www.cygwin.com แล้วดาว์นโหลด setup.exe มารันในเครื่องตัวเองครับ. หลังจากทีรันแล้วก็มีให้เลือกว่าจะอินสตอลล์จากไหนมีสามวิธีคือ

คอมไพล์ emacs บน cygwin

วันก่อนหลังจากติดตั้ง cygwin แบบมี X เซิร์ฟเวอร์เรียบร้อยแล้วก็ลองเรียกใช้ emacs ดูว่าใช้ภาษาไทยได้หรือไม่. ปรากฏว่าไม่ได้เลยตัดสินใจว่าจะคอมไพล์เองจากรหัสต้นฉบับซึ่งเหมือนกับที่เคยเขียนไปแล้วครั้งหนึ่ง. หลังจากที่ make แล้วก็ไปติดที่