yagshi's website
モバイルプリンタPhomemoをLinuxで使う

モバイルプリンタPhomemoをLinuxで使う

TL;DR

PhomemoというモバイルサーマルプリンタをLinuxの汎用ドライバで 使う方法をメモします。基本的に github 上で公開されている ドライバを使うだけの他力本願作業ですが、ぼくの持っている機種 (Phomemo M120) だと一部うまく動作しないところがあったので パッチを当てました。

phomemo printer

テストページ印刷(用紙サイズを間違えたのではみ出ています……。)

ドライバのダウンロード

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 に移動して makemake 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