ปรับปรุง HylaFax Client

ปรับปรุงจาก ทดลองทำ HylaFAX Client

ครั้งก่อนมีปัญหาว่า daemon ถูกรันโดย root ใน runlevel ที่อยู่ในสถานะอักขระ (text mode) ซึ่งยังไม่มีการกำหนดค่าตัวแปรแวดล้อม $DISPLAY

แต่เวลาซ็อกเก็ตถูกเรียกใช้ จะถูกเรียกใช้โดยผู้ใช้ที่ runlevel ที่อยู่ในสถานะกราฟฟิก โดย GTK+ จะมาดูว่าต้องแสดงผลที่จอไหน จากตัวแปรแวดล้อม $DISPLAY นี้ ทำให้โปรแกรมตาย

ซึ่งต้องแก้ปัญหาด้วยการใช้คำสั่ง $ sudo /etc/init.d/pyla-printd restart จากเทอร์มินัล จึงจะแก้ปัญหานี้ได้

ตอนใหม่นี้ เราจะไม่ตั้งให้เรียกจาก runlevel แล้ว แต่จะตั้งให้รันจาก gnome-session ของผู้ใช้เลย ทำให้แก้ปัญหาเรื่องต้องเริ่มเซอร์วิสใหม่ได้

แต่เพื่อป้องกันการสับสน จะขอเริ่มใหม่เลย

ต้องมีเซิร์ฟเวอร์ที่เป็น HylaFAX แล้ว ดูวิธีติดตั้งได้จาก ลองติดตั้ง Hylafax

ติดตั้ง Pyla

$ sudo aptitude install python python-tk
$ wget http://www.teamsw.it/pyla/download/pyla1.1.7.1.tgz
$ tar xfz pyla1.1.7.1.tgz
$ sudo mv pyla /usr/local
$ /usr/local/pyla/pyla.py
-> ปรับตั้งโปรแกรม

ติดตั้งเครื่องพิมพ์เทียมให้ pyla โดยเอามาจาก Fun with CUPS and Pyla

หลักการคือเขาใช้ perl เขียนโปรแกรมทำหน้าที่เป็น socket คอยดูว่ามีข้อมูลเข้ามาทางพอร์ต 5691 หรือเปล่า ถ้ามี ก็จะเรียกใช้โปรแกรมนี้ซึ่งจะไปเรียกใช้ pyla อีกทีนึง

สร้างโปรแกรมเรียก pyla ชื่อ pyla-print เอาใส่ไว้ใน /usr/local/bin

$ sudo vi /usr/local/bin/pyla-print
#!/usr/bin/perl

# Daniel E. Markle <syntax@pa.net>
# 20031114 Revision 0.1

# This program starts up a daemon which will watch for a postscript file
#  coming in from CUPS, then launch pyla to send it as a fax.
# Use it with the socket://localhost:5691 URL in cups.

# Issues:
#    -security, make sure only localhost can see this port, it allows anyone
#      who can stream data to this port to popup pyla on your desktop
#    -must be ran as the user or the window may not pop up at the right
#      place, if at all

# ***CONFIGURE ME HERE

# Port to listen on, use socket://localhost:<port> in cups
my $MY_PORT = 5691;

# Temporary file storage, this is a file not a folder
my $TMP_FILE_NAME = "/tmp/cupsfaxtemp";
`touch "$TMP_FILE_NAME"; chmod 777 "$TMP_FILE_NAME"`;

# Log file storage
my $LOG_FILE_NAME = "/tmp/cupsfaxlog";
`touch "$LOG_FILE_NAME"; chmod 777 "$LOG_FILE_NAME"`;

# Path to pyla.py
my $PYLA_PATH = "/usr/local/pyla/pyla.py";

# Path to python binary
#  use this one for Linux
my $PYTHON_PATH = "/usr/bin/python";
#  use this one for OS X
#my $PYTHON_PATH = "/usr/bin/pythonw";

# ***END CONFIGURATION

# ----- You shouldn't need to touch anything beyond this point -----

use IO::Socket::INET;

# check to make sure we can use the temp file
open ( TMPFILE, ">", $TMP_FILE_NAME )
   or die "Can not open temp file $TMP_FILE_NAME, " .
   "check to make sure it is not owned by another user";
close ( TMPFILE );

if ( !(-e $PYLA_PATH) ) {
   die "I do not see pyla at $PYLA_PATH";
   }

my $data;
my $server = IO::Socket::INET->new (
   LocalPort => $MY_PORT,
   Type => SOCK_STREAM,
   Reuse => 1,
   Listen => 1
   ) or die "Could not start server process";
   
while ( my $job = $server->accept() ) {
   open ( TMPFILE, ">", $TMP_FILE_NAME );
   while ( <$job> ) {
      print TMPFILE $_;
      }
   close ( TMPFILE );
   close $job;
   `cat "$TMP_FILE_NAME" | "$PYTHON_PATH" "$PYLA_PATH" -i &> "$LOG_FILE_NAME"`;
   }

ทำให้รันได้

$ sudo chmod 755 /usr/local/bin/pyla-print

ตั้งให้ gnome-sessions รัน pyla-print

  1. เลือกเมนู System -> Preferences -> Sessions
  2. แท็บ Startup Programs กดปุ่ม Add
    Name: Pyla Print Daemon
    Command: /usr/local/bin/pyla-print
    Comment: Pyla Print Daemon (start by gnome-sessions)
  3. ล็อกเอาต์ และ ล็อกอิน 1 ครั้ง

จัดการให้โปรแกรมตายตอนล็อกเอาต์

  1. เมนู System -> Preferences -> Sessions
  2. แท็บ Current Sessions เลือกบรรทัดที่เป็น pyla-print
  3. เปลี่ยนปุ่ม Style เป็น Restart

เสร็จแล้ว

ติดตั้งเครื่องมือจัดการเครื่องพิมพ์

$ sudo aptitude install cups-client

เพิ่มเครื่องพิมพ์เทียมให้ระบบ ตั้งชื่อว่า hylafax

$ sudo lpadmin -p hylafax -E -v socket://localhost:5691

เมื่อทุกอย่างเรียบร้อย จะมีเครื่องพิมพ์ฃื่อ hylafax ขึ้นมา ถ้าเราพิมพ์มาที่เครื่องพิมพ์ตัวนี้ เขาจะมาเรียกใช้ pyla ให้ส่งแฟกซ์เอง

เพิ่มเติม

แก้ปัญหาดูแฟกซ์ที่รับไม้ได้ (ทำที่เซิร์ฟเวอร์)
ตั้งการอนุญาตใช้ไฟล์ ที่ไฟล์โมเด็ม (ส่วนใหญ่จะชื่อ config.ttyS0)
# vi /etc/hylafax/config.ttyS0
...
RecvFileMode:       0666
...
# /etc/init.d/hylafax restart
Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้