モバイルプリンタPhomemoをLinuxで使う
TL;DR
PhomemoというモバイルサーマルプリンタをLinuxの汎用ドライバで 使う方法をメモします。基本的に github 上で公開されている ドライバを使うだけの他力本願作業ですが、ぼくの持っている機種 (Phomemo M120) だと一部うまく動作しないところがあったので パッチを当てました。
(用紙サイズを間違えたのではみ出ています……。)
ドライバのダウンロード
vivierさんが作ってくださったphomemo-toolsというのをダウンロードします。
yagshi@awesomehost:$ git clone https://github.com/vivier/phomemo-tools
フィルタにパッチ当て
ここがこの記事のメインです。phomemo-tools/cups/filter/rastertopm02.py
を3箇所修正します。やっていることはBluetoothの通信にウェイトを入れる
だけです。
#! /usr/bin/env python3
import sys, os
import time # <-- この行を追加
#
# (中略)
#
def print_raster(file, image, line, lines = 0xff, mode = 0):
# (中略。この関数の終わりの方)
# bit image
block = image.crop((0, line, image.width, line + lines))
# stdout.write(block.tobytes()) # <-- この行を削除もしくはコメントアウト
bytes = block.tobytes() # <-- 追加
for i in range(lines): # <-- 追加
stdout.write(bytes[image.width * i:image.width * (i + 1)]) # <-- 追加
stdout.flush() # <-- 追加
time.sleep(0.05) # <-- 追加
return
#
# (中略)
#
print_and_feed(stdout, 0) # <- 2 を 0 にする。(シール紙のフィードの調整のため)
ついでにプチバグフィックスとお好みの用紙を追加
phomemo-tools/cups/drv
の下の drv ファイルの冒頭部分の 50mm x 10mm の
用紙定義が (2022年8月現在) 50mm x 25mm と間違えているので修正します。
ついでに自分が使う用紙があれば追加しちゃいましょう。
#media "w40h30/Label 40mmx30mm" 40mm 30mm // <-- 好きな用紙を追加
// #media "w50h10/Label 50mmx25mm" 50mm 10mm // <-- ここがバグ
#media "w50h10/Label 50mmx10mm" 50mm 10mm // <-- このように修正
//
// (中略)
//
MediaSize "w40h30" // <-- ここにも追加したい用紙を書く
ドライバのインストール
phomemo-tools/cups
に移動して make
と make install
をします。
yagshi@awesomehost:$ cd phomemo-tools/cups
yagshi@awesomehost:~/phomemo-tools/cups$ make
LC_ALL=C ppdc -z drv/*
yagshi@awesomehost:~/phomemo-tools/cups$ sudo make install
プリンタの追加
Phomemo の電源を入れて Bluetooth のアドレスを調べます。
yagshi@awesomehost:$ hcitool scan
Scanning ...
# (いろいろ出てくる)
DC:0D:30:C5:4F:FF Q193J27********
こんなの(上記はぼくの個体の例)が出てくるのでアドレスを控えておきます。
Gnome の〔設定〕→〔Bluetooth〕からプリンタをペアリングします。すぐに接続 解除されてしまいますがそれで ok です。
次に cups でプリンタの追加を行います。Gnome の GUI からだと Bluetooth
プリンタは指定できない?ようなので、web インタフェースを使います。
ブラウザで http://localhost:631
を開き、
〔管理〕→〔プリンターの追加〕→〔LPD/LPRホストまたはプリンター〕と
進み、「接続」欄に先ほどのアドレス bluetooth://DC0D30C54FFF
を直接入力します。(コロンは抜きます。) プリンタ名を適当につけて、ドライバ選択のところで
Phomemo/Phomemo M02 (en)
を選びます。(M120のように203dpi機の場合はM02を、
300dpi機の場合はM110を選択。en と en, en はどっちでもいいですたぶん。)
以上で完了です。用紙サイズを指定してテストページを印刷して確認しましょう。
2023/4 追記(うまく印字できない?)
ファームウェアアップデートでもあったのか、以前は上記の方法で
問題なかったはずなのですが久しぶりに使おうとしたら、
途切れ途切れに印字されるようになってしまいました。
phomemo-tools/cups/filter/rastertopm02.py
に以下のように
パッチを当てたら改善しました。
yagshi@awesomehost:$ diff rastertopm02org.py rastertopm02.py
119,120c119,120
< if lines > 255:
< lines = 255
---
> if lines > 65535:
> lines = 65535