用 kindle 顯示 LyX 的 PDF Preview
Posted by tjwei 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。
0 意見:
張貼留言