2013-04-30

PDFに含まれる画像を取り出す方法

RHEL (CentOS や Scientific Linux を含む) にインストールされている evince には, PDF 中に含まれる画像をファイルとして取り出す機能が実装されている. 文字や図形の情報を含んで画像を生成する場合はスクリーンショットを使用するが, PDF の画像のみを取り出す場合には便利である.
  • PDF を evince で開く.
  • 画像の部分でマウス左ボタンを押す.
  • マウスを動かし, 適当な端末まで移動する.
  • 左ボタンを離す. (要するに, 画像を端末へドラッグ&ドロップする.)
    このとき, 画像がファイルとして保存され, 端末にはパスが入力される.
  • なお, evince では PostScript を開くこともできるが, このときには, 画像を取り出すことができないようだ.

    FontPack910_jpn_i846-linux を展開

    RHEL や CentOS に英語の acroread をインストールすると, 日本語のフォントが付属していないため, フォントが埋め込まれていない PDF を閲覧できない. 日本語の acroread は古いバージョンしか提供されていないので, 最新の acroread を日本語対応にしたい. FontPack910_jpn_i486-linux.tar.bz2Adobe のサイトで配布されているが, 展開方法が明示されておらず, どのようにインストールすればよいか分からない. そこで, 試行錯誤した方法を示す.

    $ tar xvjf FontPack910_jpn_i486-linux.tar.bz2 
    JPNKIT/
    JPNKIT/LANGJPN.TAR
    JPNKIT/LANGCOM.TAR
    JPNKIT/LICREAD.TXT
    JPNKIT/BINCOM.TAR
    JPNKIT/INSTALL
    
    どうやら, TAR が3個含まれているらしい. これをどこかのディレクトリで展開すれば良いのだろう.
    $ tar tf JPNKIT/LANGJPN.TAR 
    Adobe/Reader9/Resource/CIDFont/
    Adobe/Reader9/Resource/CIDFont/KozMinPr6N-Regular.otf
    
    Adobe/Reader9/ というディレクトリが含まれているので, きっと /opt/Adobe/Reader9/ を指しているのだろう. というわけで, /opt/ へ移動して, 展開することにする.
    # cd /opt/
    # tar xf /tmp/JPNKIT/BINCOM.TAR
    # tar xf /tmp/JPNKIT/LANGJPN.TAR
    # tar xf /tmp/JPNKIT/LANGCOM.TAR
    
    この後, acroread を再起動したら, 日本語の PDF も閲覧できるようになった.

    2013-04-16

    Dropbox で一部のディレクトリが同期されない

    最近, Linux 上で使用している Dropbox にて, 一部のファイルが同期されないという問題が生じていた. 他のマシンからサーバまではデータが届いているものの, あるマシン (RHEL 5) にだけファイルが共有されない. 共有されないといっても, 全てのファイルの同期がされないのではなく, 特定のディレクトリのファイルだけが共有されない.

    ログ (dropboxd の出力をファイルにリダイレクトしていた) を見てみると, 以下のメッセージが出ていた.

    Unable to monitor entire Dropbox folder hierarchy. Please run "echo 100000 | sudo tee /proc/sys/fs/inotify/max_user_watches" and restart Dropbox to correct the problem.
    
    どうやら, Dropbox で Git のリポジトリを共有していたことによって大量のディレクトリが生成されていたことが原因だったらしい. なお, Dropbox で Git リポジトリを共有すると, ロック機構が働かない可能性があるので, 推奨しない.

    2013-04-12

    GNUplot でデータ分離文字を変更する方法 (CSVファイルを読む方法)

    GNUplot では, デフォルトで空白がデータの区切として扱われる. CSV (カンマ区切) のように, 他の文字をデータの区切にしたい場合は,
    set datafile separator ","
    と設定する.

    2013-04-10

    RHEL6 に Fedora 18 の chroot 監獄を作る

    仮想マシンを使うと1台のマシンで複数のディストリビューションを同時に使用できるが, メモリの使用量が多くなるなど, オーバヘッドが大きい. 一方で, chroot 監獄を使うと, 仮想マシンよりは手軽に他のディストリビューションを使用することができる.

    仮想マシンと chroot 監獄との違いをまとめておく.

    仮想マシンchroot 監獄
    kernelGood; ゲストのkernelBad; ルートのkernelと同じ
    安全性Good; ゲストの動作はホストから制限できるBad; 監獄内からでも監獄外のプロセスへ干渉できる
    サービスなどBad; 様々なサービスのプロセスがゲスト中で走るので冗長Good; 必要なプロセスのみを走らせる
    まず, chroot 監獄では, kernel を変えることはできない. ルートの kernel の上で chroot 監獄内のプロセスが走る. 従って, kernel のバージョンに依存するアプリケーションの使用には注意する.
    安全性に関しても, chroot 監獄は仮想マシンに劣る. chroot 監獄内から, 監獄外のプロセスにシグナル (SIGKILLなど) を送ることもできる. 任意のディバイスにもアクセスできる. 従って, 使い方によっては, 安全性が高まるよりはむしろ危険性が高まるかもしれない. なぜなら, 監獄内のプロセスが乗っ取られればルートのシステムに危害が加えられる可能性もあるし, ルート・監獄内と複数のシステムを管理するのは手間である.
    以上のような欠点はあるものの, chroot コマンドだけですぐに使用でき, メモリなどのリソース使用量が仮想マシンより少ないという点は魅力的である. バイナリしか入手できないアプリケーションを動かしたいが glibc のバージョンが異なる場合, 別のディストリビューションにしかないパッケージを使用したい場合などにおいて役に立つかもしれない.

    操作手順を簡単に説明する. ここでは, ルートに Scientific Linux 6, 監獄内に Fedora 18 と, ともに rpm にてパッケージ管理されたディストリビューションを使用する.

  • まずはディレクトリを作成し, rpm のデータベースを初期化する.
    # mkdir -p /opt/fedora-root/var/lib/rpm
    # rpm --root /opt/fedora-root/ --initdb
  • fedora-release をインストールする.
    $ cd /tmp && wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/18/Everything/x86_64/os/Packages/f/fedora-release-18-1.noarch.rpm
    # rpm --root /opt/fedora-root/ -ivh /tmp/fedora-release-18-1.noarch.rpm
  • /dev//etc/ を作る.
    # mkdir /opt/fedora-root/{dev,etc}
    # cp -a /dev/{null,stderr,stdout,stdin,zero,random,urandom} /opt/fedora-root/dev
    # cp /etc/{resolv.conf,localtime} /opt/fedora-root/etc/
  • bashyum をインストールする. 依存関係で他にもいろいろインストールされる.
    yum --nogpgcheck --installroot=/opt/fedora-root/ install bash yum
  • /dev/shm をマウント. (オプション)
    # mount -t tmpfs tmpfs /opt/fedora-root/dev/shm
  • chrootする.
    # chroot /opt/fedora-root/

  • 2013-04-03

    NVIDIA-Linux-x86_64-310.40

    おお, nVidia の純正ドライバでも, 画面構成を xrandr で切り替えられるようになっている!
    $ xrandr
    Screen 0: minimum 8 x 8, current 3200 x 1200, maximum 8192 x 8192
    DVI-I-0 disconnected (normal left inverted right x axis y axis)
    DVI-I-1 disconnected (normal left inverted right x axis y axis)
    DVI-I-2 connected 1600x1200+1600+0 (normal left inverted right x axis y axis) 408mm x 306mm
       1600x1200      60.0*+
       1280x1024      60.0  
       1024x768       60.0  
       800x600        60.3  
       640x480        59.9  
    DVI-I-3 connected 1600x1200+0+0 (normal left inverted right x axis y axis) 408mm x 306mm
       1600x1200      60.0*+
       1280x1024      60.0  
       1024x768       60.0  
       800x600        60.3  
       640x480        59.9  
    

    2013-04-01

    CanoScan N650U/N656U を Linux にて使用する方法

    まずは, ディバイスを接続し, lsusb にてどのように認識されているか確認する.
    $ lsusb | grep Scan
    Bus 005 Device 002: ID 04a9:2206 Canon, Inc. CanoScan N650U/N656U
    
    CanoScan N650U または N656U であることが分かった.

    scanimage -L にて, ディバイスの名前を確認する.

    $ sudo scanimage -L
    device `plustek:libusb:005:002' is a Canon CanoScan N650U/N656U flatbed scanner
    

    スキャンする.

    $ sudo scanimage -d plustek:libusb:005:002 -p --resolution 600 -x 210 -y 297 --mode Gray >tmp.ppm
    

    ディバイス固有のその他のオプションは, --help をつけると出てくる.

    $ sudo scanimage -d plustek:libusb:005:002 --help