用 kindle 顯示 LyX 的 PDF Preview

Posted by TJ Wei on 星期四, 7月 07, 2011 with No comments
  •  環境為 Win 7 32bit, LyX 1.6.9,  Python 2.7, Cygwin, Kindle DX
  • Kindle DX 安裝 usbNetwork hack
  • Cygwin 安裝 openSSH
  • 將 ssh 環境設定成無密碼登入 kindle,要在 kindle 的 usbnet/etc 下設定 authorized_keys
  • 將下面的 python 程式用 py2exe 或者 cx_freeze 包裝成 exe 檔
  • 在 LyX 裡面,將 Tools -> Preferences -> File Handling -> File Format 下的 pdf (pdflatex) 的 viewer 由 pdfview 改成我們的 exe 檔的路徑。
  • 如此就完成了,LyX 的 preview 會自動傳送到 kindle,然後自動更新書目。



import sys
import subprocess
import _winreg

#fn=r'd:\output.pdf'
fn=sys.argv[1]
# get the root dir of cygwin
try:     
    k=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\Cygwin\setup")
    CygCmd=_winreg.QueryValueEx(k, "rootdir")[0]+r"\bin\%s.exe"
except:
    CygCmd=r'c:\cygwin\bin\%s.exe'
KindleRoot='root@192.168.2.2'
powerd_cmd_tmpl='dbus-send --system /default com.lab126.powerd.%s int32:1 ;'
powerd_cmd=lambda s: (powerd_cmd_tmpl%s).split()
send_key_cmd=lambda k: ['echo', r"send %d\n"%k, '>', '/proc/keypad', ';']
try:
    # get the cygwin path name of the pdf file
    ufn=subprocess.check_output([CygCmd%'cygpath', '-u', fn]).rstrip()
    # send the pdf to kindle
    subprocess.call([CygCmd%'scp', ufn, KindleRoot+r':/mnt/us/documents/'])
    # execute commands on kindle
    subprocess.check_output([CygCmd%'ssh', KindleRoot]\
                                 + powerd_cmd('resuming')\
                                 + powerd_cmd('outOfScreenSaver')\
                                 + send_key_cmd(98)\
                                 + 'sleep 2 ;'.split()\
                                 + send_key_cmd(91)
                            )
except:
    # run the original pdf file viewer
    sys.exit(subprocess.call([r'pdfview', fn]))

幾個附註:
  • Linux 下會簡單的多,因為不需要找出 cygwin 的 rootdir,也不用將 windows 檔名轉成 cygwin 檔名。
  • windows 下也可以用 putty 取代 cygwin 的 ssh
  • resuming 是為了讓書目更新, outOfScreenSaver 可以解除 ScreenSaver 模式。也可以用關閉螢幕保護程式的 hack
  •  98 , 91 分別是 Home, Back 的 Key Code。送出這兩個鍵的原因是,當你已經在閱讀那個 pdf 檔時,先 Home 再跳回可以讓 pdf 檔更新。也許用 fbreader/fbkindle 或者 修改 kindle 的程式碼會比較好。
  • Kindle 3 的 Key Code 可能不同,可以查 Launchpad 的程式碼。
  • 也可以在 LyX 中新增一個檔案類型 pdf (kindle) 而不要修改 pdf (pdflatex)。
  • 上面的程式碼在連線 kindle 失敗時,會自動打開原本的 pdfview。
Categories: , ,