日本語を含むドキュメント名の印刷が失敗する

提供:Samba-JP
2006年8月23日 (水) 08:19時点におけるRibbon (トーク | 投稿記録)による版 (新規追加)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動検索に移動
KB番号 J0104
最終更新日 2001/07/24
作成者 はせがわようすけ
最終更新者

対象

この文書は、以下のプロダクトに付いて説明したものです。

  • Samba 2.0.10-ja-1.0
  • Windows NT 4.0

現象

coding system = sjis と設定した Samba サーバのプリンタに対して Windows 側からドキュメント名(ジョブ名)に日本語を含むような印刷を行ったときに、 ドキュメント名によっては印刷が失敗(印刷されない)したり、 スプールにファイルが残ってしまうことがあります。

原因

これは、Samba 2.0.10-ja-1.0 において J0021: 印刷時に日本語のドキュメント名が正しく表示されない を改修するため、印刷スプールを保存する際に coding system で指定された文字コードを使用して、 印刷ドキュメント名と同じ名称のファイルを作成するように変更されたために発生します。

  • Samba では印刷ドキュメント名をファイル名としてスプールに印刷データを保存
  • そのときのファイル名は coding system で指定した文字コードが使用される
  • 文字コードがシフトJISの場合、漢字コードの2バイト目に'\'(文字コード0x5c)などが含まれることがある
  • print command で指定されたコマンドは /bin/sh を経由しているため、これらのメタキャラクタがシェルに評価されてしまい、 印刷コマンドに正常にファイル名が渡らない

なお、この現象は現在、Windows NT 4.0 でのみ確認されています。 Windows2000 では、スプールのファイル名に「ユーザ名(NetBIOS名?)+適当な6文字」が付けられるため、この問題は発生しません。

対処策

本来、coding system には OS で問題なく扱える文字コードを指定するべきです。 Linux を始めとする多くの UNIX系OS では sjis ではなく、euc を指定することでこの問題を回避できます。

また、暫定的な対処方法として、次のように print command のファイル名部分(%s)をクォートで囲むことでも問題を回避できます。

[global]
        print command = lpr -r -P%p '%s'

この技術情報は samba-jp:10375, samba-jp:10380 からの一連のスレッドの議論を元に作成されています。