2025/10/28 05:01 Reverse-engineered CUPS driver for Phomemo receipt/label printers

やっほー、ロボ子!今日はLinuxからPhomemoのサーマルプリンターで写真を印刷するお話じゃ。

博士、こんにちは。Phomemoのプリンターですか、面白そうですね。Linuxで使えるのは知りませんでした。

そうじゃろ?AndroidアプリからBluetoothパケットをリバースエンジニアリングしたらしいぞ。すごいじゃろ!

リバースエンジニアリングですか!それはすごいですね。それで、具体的にどうやって使うんですか?

ふむ。Bluetooth接続なら、まずデバイスをペアリングして、`rfcomm connect 0 DC:0D:30:90:23:C7`で接続するのじゃ。そして、`tools/phomemo-filter.py my_picture.png > /dev/rfcomm0`で印刷できるぞ(M02プリンターのみ対応)。

なるほど。USB接続の場合はどうですか?

USBなら、プリンターケーブルを繋いで、`lsusb`でプリンターの存在を確認するのじゃ。`/dev`でシリアルポートを確認して、`tools/phomemo-filter.py my_picture.png > /dev/usb/lp0`で印刷じゃ(これもM02プリンターのみ対応、rootかlpグループに所属する必要があるぞ)。

M02以外のプリンター、例えばM110とかM220はどうすれば良いんですか?

CUPSを使うのがおすすめじゃ。Debianなら、`sudo apt-get update`して`sudo apt-get -y install cups`じゃ。そのあと、[phomemo-tools RPM](http://vivier.eu/phomemo-tools/)にあるpython3-pybluezとphomemo-tools CUPSドライバーをインストールするのじゃ。

CUPSの設定はGUIでもCLIでもできるんですね。

そうじゃ!GUIなら、USB接続にはpython3-pyusbが必要じゃな。Fedoraなら`sudo dnf install python3-pyusb`じゃ。SELinuxが邪魔なら、一時的に無効化する必要があるかもじゃ (`sudo semanage permissive -a cupsd_t`)。

CLIでの設定例も載っていますね。Bluetooth接続なら、`sudo lpadmin -p M02 -E -v phomemo://DC0D309023C7 -P /usr/share/cups/model/Phomemo/Phomemo-M02.ppd.gz` のように設定するんですね。

その通り!印刷オプションも`lpoptions -d M02 -l`で確認できるぞ。テキストを印刷するなら、`echo "This is test" | lp -d M02 -o media=w50h60 -`じゃ。

画像も印刷できるんですね。`lp -d M02 -o media=w50h60 my_picture.png` ですか。

そうじゃ!M110, M120, M220は`MediaType=Continuous`、`LabelWithGaps`、`LabelWithMarks`をサポートしてるから、色々試してみると良いぞ。

プロトコルについても詳しく書かれていますね。M02はEPSON ESC/POSコマンドを使用しているんですね。

そうじゃ。ヘッダー、ブロックマーカー、フッターの構成もちゃんと決まっているぞ。画像は各行48バイトじゃ。

M110/M120/M220のプロトコルも違うんですね。ヘッダーに印刷速度や濃度、メディアタイプが含まれているんですね。

その通り!ブロックマーカーもM02とは違うのじゃ。色々奥が深いじゃろ?

確かに!Linuxでサーマルプリンターをここまで制御できるとは思いませんでした。勉強になります。

ところでロボ子、サーマルプリンターって、熱で印刷するから、冬は暖かくて一石二鳥じゃな!

博士、それはちょっと違うと思います…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。