もくじ

firefoxにプリンタのデフォルト用紙を指定(2010/6/21)

概要

日本学生支援機構の奨学金を申し込みに際して普段授業でほとんど使わないプリンタを使うことになった。

firefoxがプリンタのデフォルト用紙をUSレターにしてしまう。本来ならデォルトプリンタのデフォルト用紙を拾ってくるはずのもの。一度設定して印刷するとprefs.jsに保存されて次からは使える。user.jsを使って強制することにした。

結局表記の問題は解決しなかったが、印刷を除けばlinuxでも問題なくできたということと、perlスクリプトを使ったプロファイルのコントロールの例として報告しておく。

経緯

日本学生支援機構の奨学金を申し込む際にウェブページのフォームを利用して登録する部分がある。各自が家庭からアクセスすることになっているが、家庭にインターネット環境がなかったり記入内容や操作に不安があったりで希望者には学校の設備を使ってさせている学校も多い。本校でもということになった。

日本学生支援機構 Scholar Net 奨学金の新規申込 推奨環境

・OS(オペレーティング・システム):
 Microsoft Windows 2000、XP
・ブラウザ(ホームページ閲覧ソフト):
 Microsoft Internet Explorer 6.0(暗号強度128ビット)、7.0(暗号強度128ビット)

LinuxはおろかMacも相手にしていない。しかもWindows Vista にも 7 にも言及がない。これで本当に家庭からさせようと考えているのだろうか。ブラウザがIEだけなのも気に入らないが、やってみるとLinux(Debianとfirefox)でも印刷以外は問題がなかった。Direct X などを呼び出してWindowsでないとできない設計になっているシステムも多い中、これは立派なことだ。

印刷だけちょっとトラブルがあったがこのシステムの問題かfirefoxの問題かははっきりしない。授業でプリンタを使うことはまずないので古いプリンタしかなく、ノウハウもほとんどないことも関係している。

現象

[ファイル]-[ページ設定]で初期状態を調べるとUSLetterになっている。

プリンタはEPSONのLP-1500でプリンタのパネルではA4,B5,葉書の3つしか選択できない。このまま印刷するとLP-1500からLTの用紙に替えろといわれる。この紙はA4より少し長辺が長いのでA4に無理に印刷するとエラーになる。エラー解除ボタンで次のページが出てくるが、待たされるとLinux側がプリンタを停止にし、回復しても自動では再開しない模様。これがいろいろなトラブルの元になっている。

firefoxでは[ファイル]-[印刷]でプリンタは選択できるか用紙は選択できない。Debian標準のブラウザであるepiphanyも同様なのでDebianの設計なのかもしれない。

普通はページ設定なりプレビューからA4に変更できるので問題はないが、日本学生支援機構の奨学金の新規申込はメニューバーやツールバーを隠してしまうのでそれができない。

Windows上のfirefoxでは[ファイル]-[印刷]のダイアログから用紙の交換を含めて変更が可能になっている。

対策

一度印刷するとprefs.jsに記録されてA4を使った設定が残るので、次からはよいのだが、ページ設定でA4を先に選んでも印刷したことがないとUSLetterに戻ってしまう。

一度印刷したときにprefs.jsに記録される設定の一部がこれ。

これをuser.jsにして加えることでこれを強制できる。(firefox起動時にprefs.jsを読み込んだ後にuser.jsを読むので)

user_pref("print.printer_epsonLP1500.print_paper_height", "297.00");
user_pref("print.printer_epsonLP1500.print_paper_name", "iso_a4");
user_pref("print.printer_epsonLP1500.print_paper_size_type", 1);
user_pref("print.printer_epsonLP1500.print_paper_size_unit", 1);
user_pref("print.printer_epsonLP1500.print_paper_width", "210.00");

本来はこれをデフォルトにしてユーザーが書き換えられるようにすべきもの。user.jsに書いてしまうと常にこれが強制されるのであまりよくないのだが、どうもその設定法が見つけられなかった。/etc/にもそれらしいディレクトリが空のままあるのだが、うまくいかない。

強制しても、その都度なら変更できるし、A4以外にしようとあまり考えないものなのでこれでもいいだろう。

全ユーザーへの摘要の計画

firefoxのユーザーのプロファイルはLinuxの場合ユーザーホームの.mozilla/firefoxディレクトリの中にある。

$ ls -l .mozilla/firefox/
合計 8
drwx------ 9 adachi adachi 4096 2010-06-22 06:57 3wqb4kyk.default
-rw-r--r-- 1 adachi adachi   94 2009-09-20 21:41 profiles.ini

この3wqb4kyk.defaultフォルダは複数のプロファイルを作成するためにランダムな文字列が使われていてユーザーごとに異なる。このフォルダ内にprefs.jsとuser.jsが格納される(user.jsは作らなければ存在しない)。このフォルダ名は、profiles.ini中に次の様に書かれている。

adachi@debian64:~$ cat .mozilla/firefox/profiles.ini
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=3wqb4kyk.default

従って手順としては次の様になる。

  1. 対象となるユーザー名を取得する
  2. そのユーザーの.mozilla/firefox/profiles.iniを読む
  3. Pathに書かれているフォルダへuser.jsをコピーする

全ユーザーへ摘要するperlスクリプト

本校ではユーザーホームはサーバー内に全部あるので、サーバー内でスクリプトを実行すれば容易にコピーができる。

getent passwd で取得できるユーザー名の一部。grep '^[a-f]8' でフィルタリングしている。

$ cat users
a8konomi:x:3041:3041:a8konomi:/home/a8konomi:/bin/bash
a8naoko:x:3042:3042:a8naoko:/home/a8naoko:/bin/bash
a8imai:x:3043:3043:a8imai:/home/a8imai:/bin/bash
a8ayaka:x:3044:3044:a8ayaka:/home/a8ayaka:/bin/bash
a8megumi:x:3045:3045:a8megumi:/home/a8megumi:/bin/bash
a8shiori:x:3046:3046:a8shiori:/home/a8shiori:/bin/bash
a8yuma:x:3047:3047:a8yuma:/home/a8yuma:/bin/bash
a8karoji:x:3048:3048:a8karoji:/home/a8karoji:/bin/bash
....

user.jsをコピーするperlスクリプト

#!/usr/bin/perl
#copy user.js to profile directory

$filename="testusers";
$filename="users";

open(SFILE,$filename) || die "cannot open $filename";
while (<SFILE>){
   ($uname,$dummy)=split(/:/);
   print "$uname\n";
   #print "/home/$uname/.mozilla/firefox/profiles.ini";
   open(PRFF,"/home/$uname/.mozilla/firefox/profiles.ini") || print " error $uname\n";
   # not work ~$uname/.. 
   while (<PRFF>){
       chomp;
       ($key,$value)=split(/=/);
       # print "  $key"; 
       if ($key eq "Path"){
          #print "  $value\n"; 
          #print "/home/$uname/.mozilla/firefox/$value\n";
          `cp ./user.js /home/$uname/.mozilla/firefox/$value`;
          `chown $uname:$uname /home/$uname/.mozilla/firefox/$value/user.js`;
       }
   }
   close(PRFF);
}
close(SFILE);

#以下はコメントでプログラムがうまく動いているかスクリプト作成時にテストしたものをあえて残したもの

以上/root/ldap/mkpass/bin/fxlp1500で作業

合計 14
-rwx------ 1 root root   785 2010-06-21 21:08 cpuserjs.pl
-rw-r--r-- 1 root root   150 2010-06-21 20:27 testusers
-rw------- 1 root root   335 2010-06-21 20:19 user.js
-rw-r--r-- 1 root root 10248 2010-06-21 20:26 users

実際の効果

テストしたユーザーではうまくいったのだが、実際の場面ではUSLetterになっていた。CUPSから設定するプリンタのオプションでもデフォルトはA4であることも確認している。firefoxの問題なのか、LP-1500との根回しに問題があるのか、Scholar Netとの間で問題があるのかわからない。

エラー解除ボタンを何度か押せば印刷はされるが、一人につき3ページはちょっと多い。印刷は必須事項でないので印刷を省略するものもあった。


Linuxクライアント/サーバ運用
聖愛中学高等学校
安達 順一
http://www.seiai.ed.jp/
2010-06-25