TK のすべての投稿

Optiplex 7020でWoLを設定すると、シャットダウン後数秒で電源が入る

Launchpadにもあるこの問題、
2年ほど前、弊社ではDELLのOptiplex7020+Ubuntu 14.04で発生しました。
社内でのセットアップ時に頻発し、原因もわからず、なぜか納品してお客様のところで設置したところ現象が起きなくなったため放置していました。

今回、なぜか再発したため、再び調査したところ、当時は見つけられなかったRedHatのbugzillaを発見しました。
問題はUSB 3.0周りにあるらしく、最近のカーネルにはこの現象への対処が組み込まれていて、

xhci_hcd.quirks=270336

などをカーネルオプションに設定すると回避できるようです。

Ubuntu 14.04 + Libreofficeで印刷できない。(LBP3410)

14.04にアップグレードしたところ、Libreoffice Calcで作成していた帳票がLBP3410で印刷できないという連絡をいただきました。(プリンター側で、ジョブエラーになる)

ググってみたところ、ディストリビューションは違いますが、LibreOfficeの印刷とPDFの印刷ができない、を見つけました。

対処方法としては、EPSONプリンターの時と同じように、-o pdftops-renderer-default=pdftopsを設定するか、または、Libreofficeのプリンターのプロパティで、出力データをPDFからPostScriptに変更するとよいようです。

14.04+ibus-mozc+glclient2でログイン後最初の選択番号のフィールドが自動で半角にならない

jma版のibus-mozc(ibus-anthyも)はファイル(/tmp/im-status.ユーザーid.txt)で現在のIMの全角・半角状態を保持して、gtkpandaと協調して全角半角切り替えを行うパッチが当たっています。ところが、電源投入直後のログインでは、ibus-mozcが初期状態が全角にも関わらずim-statusファイルが存在しないため全角状態を取得できず、選択番号が全角入力のままになってしまうようです。(一度全角半角キーを押して切り替えを行なうと、im-statusファイルは作成されます)

本当はibus-mozcの方を直接直してビルドするのがいいのでしょうが面倒なので、以下のファイルを自動起動ファイル(ホームディレクトリの).config/autostart/im-status.desktopとして追加しました。

ログイン時に、im-statusファイルを作成し中身を1(全角状態である)に設定しているだけですが、これによって電源投入直後でもうまくglclient2が全角半角を切り替えてくれて、選択番号のところが半角入力になりました。

(上記ファイルは以下の手順でダウンロードできます)

mkdir ~/.config/autostart
wget -O ~/.config/autostart/im-status.desktop https://gist.githubusercontent.com/nts-kimura/0b777f4146bad53676771d2749215977/raw/e089e004e675aeff45b48b80681c934a2b9357cc/im-status.desktop

12.04 LTS→14.04 LTS アップグレード

今更感がありますが。

ポイントは、14.04にpostgresql-9.1のパッケージがないので、pgdg版を使うのと、普通にdo-release-upgradeすると、サードパーティのapt-lineが無効化されてしまい一発でアップグレードが終わらないので、無効にしないオプションをつけてdo-release-upgradeを起動します。

pgdg版 PostgreSQLがインストールされるように設定

https://www.postgresql.org/download/linux/ubuntu/ にあるように、apt-keyとapt-lineを設定。
/etc/apt/sources.list.d/pgdg.list

deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main

ただし、そのままだとpostgresql-9.1以外のPostgreSQLパッケージもpgdg版が入るので、それ以外はUbuntu版が入るように/etc/apt/preferences.d/postgresql として以下を設定

サードパーティのaptが無効にされないようにするオプション

以下のように環境変数 RELEASE_UPRADER_ALLOW_THIRD_PARTY=1 を設定(UP’G’RADERではない)してdo-release-upgradeをかけると、jma-receiptのapt・上で設定したPostgreSQLのpgdg版のapt-lineが無効にならずに、Presice→Trustyに書き換わっていい感じにアップグレードされます。

RELEASE_UPRADER_ALLOW_THIRD_PARTY=1 do-release-upgrade
PostgreSQL 9.1→9.3へデータ移行

アップグレード直後はPostgreSQL 9.1で動作しているため、PostgreSQL 9.3で動くように変換します。pg_upgradeclusterコマンドで一発で9.1から9.3へデータ移行できますが、アップグレード時に9.3 mainという名前の空のデータベースクラスタが出来上がっているので一旦削除してから変換します。

pg_dropcluster --stop 9.3 main
pg_upgradecluster 9.1 main

うまく移行できたら、9.1 mainのクラスタ、postgresql-9.1のパッケージ、apt-lineなども削除。

その後、14.04のデスクトップの設定などを行いますが、弊社では極力手作業ではなくAnsibleをつかって自動化しております。
アップグレードにかかった所要時間は、1時間程度でした。(Core i5-4590 4GB、パッケージは事前ダウンロード、HDDで、ext4はnobarrierオプション付き)

Ubuntu 14.04 ibus-anthy 半角/全角キーで入力モードを半角⇔全角カタカナにする

いままでデフォルトでカタカナにしていたので、[半角/全角]キーで切り替えた時にカタカナになってほしいとの要望。(ibus-mozcのほうは一度カタカナにすると半角/全角でトグル動作してもちゃんと覚えててカタカナになるみたいです)

/usr/share/ibus-anthy/engine/engine.py を

このように修正して対応しました。ソースはPythonで書かれていましたが最近Pythonもちょこちょこ触っているので苦手意識がなくなってきました。

Ghostscriptのビルド

前回、Ghostscriptをビルドしようとして嵌まったところ。

.debパッケージ作成はググってコピペしてようやく作成できるレベルなので、Ghostscriptをビルドしようとしてはまりました。

パッチを当ててビルドするために、以下の流れでビルドしようとしましたが、

apt-get source ghostscript                
cd ghostscript-9.10~dfsg/
patch -p1 < ~/gs-eplaser-1bpp.patch  # 独自パッチ
debuild -uc -us -b
dh_makeshlibs: dpkg-gensymbols -plibgs9 -Idebian/libgs9.symbols -Pdebian/libgs9 returned exit code 1

上記のようなエラーがでて、libgsのビルドのあたりで停止してしまいます。どうも、ソース中のdebian/symbols.commonが、ビルドで生成されるdebian/libgs9/DEBIAN/symbolsと差異があるといったエラーのようです(よくわかりません)。

それなら、ということで

cp debian/libgs9/DEBIAN/symbols  debian/symbols.common

して、生成されたものと同じものに変更して、

debuild -us -uc -nc -b

で継続したところ、うまくパッケージが作成されました。

Ubuntu 14.04とEPSONレーザープリンターについて

[orca-users:13972]の内容について、弊社ではEPSONレーザーをメイン機として使っているお客様はいないものの、社内にはEPSON LP-9100があり、同様の現象が発生したため調査しました。
cupsd.confのLogLevelをdebugに変更して/var/log/cups/error_logを12.04の時と比較したり、gdbでgsをステップ実行したりして調査した結果です。

12.04より左マージンが大きくなる問題

14.04で印刷するとなぜか左マージンが大きくなり、右端の印字が切れます。これはCUPSの途中で走るPDF→PSへの変換処理がGhostscriptで行われると発生するようです。/var/log/cups/error_logでいうと

Running command line for gs: gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=ps2write -sOUTPUTFILE=%stdout -dLanguageLevel=3 -r600 -dCompressFonts=false -dNoT3CCITT -dNOINTERPOLATE -c 'save pop' -f /tmp/foomatic-1Emzj

の部分で、このps2writeデバイスで出力されたPSファイルをeplaser-jpで処理すると印字がズレるようです。
(ただしこの変換済みのPSファイルをgvなどで見てもずれているわけではないので、eplaser-jpとの組み合わせで発生するようです)
対処として、

lpadmin -p プリンタ名 -o pdftops-renderer-default=pdftops

を設定すると、このPDF→PSへの変換処理が、poppler-utilsのpdftopsを使うようになり、

/var/log/cups/error_log
 Running command line for pdftops: pdftops -level3 -origpagesizes -nocenter -r 600 /tmp/foomatic-gEB0Zx -

きちんとした位置に印字されるようになります。

QRコードが白黒反転したり、薬剤情報の写真がない部分が黒塗りになる

この不具合は、もともとあったGhostscriptのgdevescv.cドライバーの1ビット画像の処理の抜けではないかと考えています。
(12.04版ORCAでQRコードの部分は1ビットイメージではないので再現しません)

1ビットイメージを描画する際はescv_copy_monoで行っているようですが、ビット1が、透明・または白色をあらわすというパラメータが渡ってきた場合、(one == gx_no_color_index、または、one == vdev->whiteのとき)、ESC/Page側では1が黒で固定されている(?)ため、0と1を反転させてからプリンタ側に送信しなくてはなりませんが、反転処理が行われていないようです。(コメントにはビット反転、という部分がありましたが処理は空)。
ビットを反転して送信する以下のパッチを作成し、gsをビルドすると正しい印字となりました。

#あとで気づきましたが、gdevescv.cを改造する話に同じようなパッチがありました。10年以上前から存在する不具合なんですね・・。

全てのソースが公開されているので(今回ESC/Pageの仕様書もEPSONからダウンロードしました)、調べようと思えばなんとかなるものですね。今回、ちょっとだけCUPSからプリンタまでの処理の流れについて知識が増えた気がします。

Ubuntu 14.04 + LIPS での処方箋QRコード

上記環境でORCA処方箋のQRコードが印刷されない問題、フィルタにパッチを当てたりいろいろ対処方法を探って来ましたが、

結局、GhostscriptへGS_OPTIONS=-dUseCIEColorという環境変数が設定されていれば解決するので、

cupsd.confに

SetEnv GS_OPTIONS -dUseCIEColor

を追加してお試しください。