2015-01-19

MF8350Cdn でスキャンしてもファイルがみつからない

MF8350CdnというCanonの複合機でUSBメモリにスキャンすると, 「SCAN0005.pdfに保存しました」といったメッセージが出るのに, PCで確認するとなにも保存されていないという事態になった. 結局のところ, 原因がわかった.

以下の方法で, たぶん, 再現できる.

  1. パーティションを切らずにUSBメモリ全体をフォーマット
    # mkfs.vfat /dev/sdg
  2. パーティションテーブルを作って, パーティションを切る fdisk /dev/sdg で, 以下のようなパーティションテーブルを作る.
    # fdisk -l /dev/sdg
    Disk /dev/sdg: 65 MB, 65536000 bytes, 128000 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x13e15d3c
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdg1            2048      127999       62976    b  W95 FAT32
    
    
  3. パーティション1をフォーマット
    # mkfs.vfat /dev/sdg1
  4. MF8350Cdnでスキャンする.
上記のような操作をすると, sdg1 ではなく, sdg にファイルシステムがあると勘違いして, スキャンデータをsdgに書き込むらしい. パーティションテーブルを読まずに, FATのテーブルのマジック「EB xx 90」を探しているだけなのだろう.

以下の方法で, 正しく, sdg1 にスキャンデータを書き込むようになった.

  1. USBメモリの前の方にゼロを書き込む
    # dd if=/dev/zero of=/dev/sdg bs=32768 count=512
  2. パーティションテーブルを切る
    # fdisk /dev/sdg
  3. フォーマットする
    # mkfs.vfat /dev/sdg1

なお, photorec を使うと, sdg に書き込まれていたファイルを取り出すことができた.

  1. # dd if=/dev/sdg >/tmp/b.img
  2. $ photorec /tmp/b.img
  3. PhotoRec の中で, 以下のように Whole disk を指定する.
    Disk /tmp/b.img - 65 MB / 62 MiB (RO)
    
         Partition         Start        End    Size in sectors
    >     Unknown         0   0  1  1015   2 26     128000 [Whole disk]
        P FAT16           0   0  1  1015   2 26     128000 [NO NAME]
    

このプリンタ以外に, オシロスコープでも同様の現象が起こっていた気がするので, 多くの組み込みシステムで同様の処理が行われているのだろう.

2015-01-16

GITレポジトリをウェブ (HTTPやFTP) で公開する

GITのレポジトリをウェブサイト (HTTPやFTP) で公開することができる. リードオンリーでクローンしてもらうことができる.

レポジトリをウェブからアクセスできるように ~/public_html/下などに置き,

$ git update-server-info
を行えばよい.

2015-01-14

メールサーバからの応答: XX is not yet authorized to deliver mail

あるメーリングリストに投稿しようとしたら, なかなか届かない. メールサーバからの配送で以下のように詰まっていた.
$ mailq 
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
xxxxxxxxx      1522 Wed Jan 14 xx:xx:xx  hoge@example.net
(host mx.example.com[xx.xx.xx.xx] said: 451-xx.xx.xx.xx is not yet authorized to deliver  mail from 451- to . Please 451 try later. (in reply to RCPT TO command))
                                         ml1@lists.examplle.com

このページに書かれているグレーリストの実装とかに引っかかっているのかもしれない. よくわからないが, もう一度試すように, キューをフラッシュしたら送れた.
$ postqueue -f
(一般ユーザでフラッシュできたのはなぜ?)

2015-01-13

lpr: 'application/postscript' はサポートされていない形式です!

CUPS は Unix/Linux で使われる印刷サービスなのだけれど, たまに設定ファイルが書き換わって印刷できなくなることがある.
/var/log/cups/access_log に
Print-Job client-error-document-format-not-supported
と出力され, lpr コマンドを使うと
lpr: 'application/postscript' はサポートされていない形式です!
というエラーが出ることがある.
なぜか, PS も PDF も受け付けない:-(

/etc/cups/printers.conf に, 以下の3行を追記する. 追記する場所は, <Printer> または <DefaultPrinter> と </Printer> の間. 複数のプリンタを設定している場合, それぞれに追記.
追記するとき, 一度 CUPS を停止させておく.

$ sudo service cups stop
$ sudoedit /etc/cups/printers.conf
$ sudo service cups start

2015-01-08

NFS上のホームディレクトリへの大量のアクセス

研究室でNFS上のホームディレクトリを置いていると, 動作速度の点で問題が起こることがある. その一例を紹介する.

NFSサーバへあるクライアントからのアクセスが集中している. サーバ上で例えば以下のコマンドにより, どのクライアントからのアクセスが多いかを調べられる.

 $ netstat -t 1 | grep nfs 

そのクライントへログインして top を実行すると, gvfsd-metadata のCPU使用率が高いことが分かった.

対策はまだわかっていないが, ひとまず killall gvfsd-metadata でその場をしのいだ.

CentOS 6 plus で Intel NIC が使用できなくなる

CentOS 6 を使用していると, 以下のエラーが出て, NICが使用できなくなることがある. CentOS plus の kernel-2.6.32-431.el6.centos.plus.x86_64 などのカーネルを使用していると起こり, 本家の Redhat Enterprise Linux 6 では起こらないらしい.
e1000e 0000:03:00.0: eth0: Reset adapter unexpectedly
e1000e 0000:03:00.0: eth0: Timesync Tx Control register not set as expected

以下のコマンドで, centosplus を無効にして kernel をアップデートすればよい.

$ sudo yum --disablerepo=centosplus update 'kernel*'
もし, centosplus から最新のカーネルをインストールしていたら, バージョン番号を添えて yum install をすればよかったかな.
$ sudo yum install kernel-2.6.32-504.3.3.el6.x86_64

2015-01-07

FFmpeg により Windows デスクトップを録画する

UScreenCapture というソフトを使うと, デスクトップの画像を取得することができる. これと FFmpeg を組み合わせると, デスクトップを録画できるようになっている. FFserver と組み合わせれば配信もできる.
  1. UScreenCapture をインストール
    http://www.videohelp.com/tools/UScreenCapture からダウンロードし, (私の使用した環境は64ビットなので) UScreenCapture (x64).msi をインストールする.
  2. FFmpeg をダウンロードし展開
    https://www.ffmpeg.org/download.html から FFmpeg の最新版のWindows Buildをダウンロードし適当な場所に展開する. bin\ffmpeg.exeにパスを通す.
  3. ファイルに保存する.
    ffmpeg -f dshow -i video=UScreenCapture -vf "crop=640:480:1728:0" a.flv
    一部の領域だけを切り取ることもでき, 上記の crop=640:480:1728:0 の数字はそれぞれ 幅:高:Xオフセット:Yオフセット である. デスクトップ全体を録画するなら, 「-vf "..."」を書かない.

その他

  • 以下のコマンドで, dshow の入力一覧を出力できる. そこに USceenCapture が出てこれば, UScreenCapture のインストールはOK.
    ffmpeg -list_devices true -f dshow -i dummy
    このページがソース.
  • FFmpeg は 7z 形式だが, その展開には, Linux では p7zip を使う.