2015-12-27

Eizoのディスプレイ EV2750 をLinuxマシンから使うために買った

PCで作業をするためのディスプレイを探していて, EizoのEV2750を購入した.

この機種を選んだポイントは, そこそこ画素数が多くピクセルサイズが小さい, 論文やプログラムを書くときに目が疲れにくそうなところ. その他に, 左右に並べて別々の入力を表示できるという点も魅力だった.

普段はLinuxを使うので, そういう観点から使ってみた感想を書いてみる.

DisplayPortのホットプラグ検出

電源offや省電力モードなった時, ケーブルを抜いたように振る舞う. 私はノートPCに接続して使っているのだが, ディスプレイが省電力モードになる度に出力先を設定する必要がありわずわらしかった.

この問題には解決策があって, 「Compatiblity Mode」をonにすると良い. 電源がonの状態で, 一番左のボタンを3秒間押し続ける. 「Compatibility Mode: On」と表示される.

DisplayPort/HDMIを通した音声出力

Fedora release 30 では, Volume Control (pavucontrol) で Built-in Audio の Profile 設定を Digital Stereo (HDMI) Output にすると音が出た. CUIでも pacmdpactl で設定できるはずだが, 試していない.

内蔵のスピーカーでは低音がほとんど欠落してしまう. スペック的な欲をいうと, S/PDIFで音声をだしてくれるともっと良かった... 音声はもともと期待していなかったので問題ない.

PbyP (2入力同時表示)

入力の選択をPbyPにすると, 2個の入力を左右に表示できるようになる. PbyPにすると, 画素数のモードが変わった.
通常時のxrandr出力:
DP1 connected 2560x1440+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
   2560x1440     59.95*+
   1920x1200     59.88  
   1920x1080     60.00    59.94  
   1600x1200     60.00  
   1680x1050     59.95  
   1600x900      60.00  
   1280x1024     60.02  
   1280x800      59.81  
   1280x720      60.00    59.94  
   1024x768      60.00  
   800x600       60.32  
   720x480       60.00    59.94  
   640x480       60.00    59.94  
   720x400       70.08  
PbyP時のxrandr出力 (幅だけ半分の1280x1440が現れ, 画面サイズの情報が消えた.):
DP1 connected (normal left inverted right x axis y axis)
   1280x1440     59.90 +
   1280x1024     60.02  
   1280x800      59.81  
   1280x720      60.00    59.94  
   1024x768      60.00  
   800x600       60.32  
   720x480       60.00    59.94  
   640x480       60.00    59.94  
   720x400       70.08  

なお, 管理者設定にて「Auto PbyP resolution」をon/offで切り替えられるのだが, offにすると1280x1440は現れない. (両方のユニオンを出してくれれば良かったのだが)


執筆時点では EV2750 が最新だったが, USB Type-C に対応した後継機も発売されている.

画素数がさらに多くなり 4K に対応したモデルもある.

2015-11-14

FedoraでDVDを再生する

Fedoraでは, 以下の手順でDVDを再生できる.
  1. libdvdcssをビルド・インストールする.
    git clone git://git.videolan.org/libdvdcss
    cd libdvdcss
    aclocal
    autoheader
    autoreconf -i
    automake --add-missing
    make
    sudo make install
    
  2. vlcをインストールする
    sudo dnf install vlc vlc-extras
  3. libdvdcssのパスを環境変数に設定してvlcを起動する
    env LD_LIBRARY_PATH=/usr/local/lib: vlc

2015-11-08

Postfix: 細工したメールにより他者に配送エラーメッセージが送られる

Postfixは, 配送でエラーが起こると, 送信者に配送エラーメールを返すようになっている. たとえば, 配送先のアドレスが存在しない, メールボックスが満杯など.
本来はこうあるべきなのだけれども, この機能を悪用して, 第3者に配送エラーメールをスパムメールとして送る手口があるらしい.
MAILER-DAEMONが配送エラーメールを送る事自体, スパムの情勢とあっていないのかもしれない.

棒サイトでは, 配送先アドレスが存在しない場合に配送エラーメールを送らないような設定をしており, メールアドレスを間違った場合, 気づかずに処分されてしまう設定をしているほどだ.
こうしないと, 自分のサーバーがスパムメールの送信元となってしまい, ブラックリストに入れられてしまう.
配送先アドレスが存在しない場合は対処方法があるのだが, 他にも手口があるので, 紹介する. こういう攻撃に対しても対処が必要だ:-(

Postfixに, 配送ループが起こっていると錯覚させる. 以下の例では, 踏み台ホストをsmtp.example.org, 踏み台のメールアドレスをhoge@example.orgとして書いている.

$ telnet smtp.example.org
220 smtp.example.org ESMTP Postfix
helo localhost
250 smtp.example.org
mail from: 
250 2.1.0 Ok
rcpt to: 
250 2.1.5 Ok
data
354 End data with .
Delivered-To: hoge@example.org
Date: Sun 08 Nov 2015 20:23:15 +0900
... (続く)
.
250 2.0.0 Ok: queued as 123456789A
メール本文にあるDelivered-To:によって, ループが起こっていると錯覚するらしい. 他にも, Received:ヘッダーをたくさん書くなどでも, 同様の配送エラーを起こすことができるかも.
以下に, このメールを受けたホストでのログを紹介する. 最後の行で, 犠牲者spamee@example.comにメールを送ってしまったことが分かる.
postfix/local[11]: 123456789A: to=, relay=local, delay=52, delays=52/0.01/0/0.06, dsn=5.4.6, status=bounced (mail forwarding loop for hoge@example.org)
postfix/cleanup[12]: 2233445566: message-id=<20151108120947.2233445566@smtp.example.org>
postfix/bounce[13]: 123456789A: sender non-delivery notification: 0B41860FF6
postfix/qmgr[14]: 2233445566: from=<>, size=2074, nrcpt=1 (queue active)
postfix/qmgr[14]: 123456789A: removed
postfix/smtp[15]: 2233445566: to=, relay=x.x.x.x, delay=0.29, delays=0.03/0.02/0.2/0.04, dsn=2.0.0, status=sent

2015-09-16

PulseAudioにて出力先を設定する方法

PulseAudioは, 最近のLinuxにて使われているオーディオサービスで, 音楽などの再生ソフトとディバイスとの間をとりもってくれている.

PulseAudioでは出力先が複数あっても, デフォルトを設定できるだけでなく, 切り替えることまでできる.

まず, 出力先のデフォルト設定は, 以下のようにする.

$ pactl set-default-sink 出力先
便利なことに, 端末でTabを押すと, 出力先を補完してくれる.
また, 出力先の移動はmove-sink-inputを使う.
$ pactl move-sink-input ID 出力先

なお, sink, sourceなどの用語がでてくるが, 以下のような意味だ. Inputやoutput, sinkとsourceが出てきて, 使い始めた時に混乱した.

sourcePulseAudioの入力, 送信側, 音源
sinkPulseAudioの出力, 受信側
source-output送信側の出力 (プレーヤーの出力端子みたいなもの)
sink-input受信側の入力 (アンプの入力端子みたいなもの)
Souce-outputからsink-inputへ接続するのがPulseAudioの役割と思えば良い. PulseAudioがミキサーみたいなものと思うと, input/outputが逆転してしまう:-(

GUIのツール (pavucontrol) もあって, 出力先を含めて簡単な設定ができる.

2015-07-28

dnfにてSRPMをダウンロードする方法

YUMでは, yumdownloader --sourceというコマンドでSRPMをダウンロードできた. DNFではどうなっているかというと, dnf download --sourceでSRPMをダウンロードできる.

なお, dnf downloadを使うには, python-dnf-plugins-coreをインストールしておく必要がある.

2015-05-22

Dell Latitude: Not charge but AC adapter plugged

Sometimes I uses Dell Latitude E7*** notebook and I found that it can stop charging before fully charged. Limiting battery charging is good for battery lifetime but Dell does not provides such a feature.

When I plugged not it not all the way seated as picture. The AC power provides power but note PC does not start charging!


(A PC on this picture is Thinkpad but it does not provides such features. This picture is just for describing how to plug.)

Dell Latitude: 充電を手動で止める方法

ときどきDellのLatitudeを使うのだけれど, AC電源プラグを中途半端にさすと, AC電源から電力が供給されるが, 充電はされないことが分かった.

バッテリーの寿命を伸ばすためにはフル充電しないのが良いと聞くが, このPCには充電を途中で止めるためのしきい値設定が見当たらない. プラグを中途半端にさすことで充電する・しないを切り替えられるのは便利だ.


AC電源を接続したが, 充電はしない. (このスクリーンショットは合成です)

このように中途半端にプラグをさすと, 電力供給はされるが, 充電はされない. (この写真はThinkpadですが, Thinkpadではこのようなことは起こりません)

2015-03-21

楽天ウェブ検索の上位にボッタなサイトが出てくる

知人がESTA申請をしようとして偽サイトで高額を支払いそうになったと聞いて, 楽天ウェブ検索で「ESTA」を検索してみた. そしたら, こんな結果がでてきた.
試しに最上位に出たページで手続きを進めたら, 73ドルも要求された. 正規のサイトなら14ドルなのに.
楽天のこういうところは, ユーザが不利益を被ってでも楽天がたくさんの収入を得ようという姿勢を感じる.

2015-03-12

lprコマンド: 印刷時刻を指定

CUPS の lpr コマンドで印刷ジョブを投げるとき, -o job-hold-until=when オプションを使用することで印刷時刻を指定できる.
例えば, 13:00に印刷したい場合, 以下のように書く.
lpr -o job-hold-until=13:00

2015-02-26

PowerPoint: 箇条書きの丸印の色が文字色と一緒に変わる

PowerPoint 2007 のスライドの箇条書きにて, 1文字目の色を変えると, 箇条書きの丸印の色が一緒にかわってしまい, 不細工である. この設定は, 以下のようにして, 変えられる.
  1. リボンの [表示]->[スライドマスタ] から, スライドマスタを開く. (こうすると, このファイルの既定の設定を変えられる. もし個別に設定したければ, この手順は省略.)
  2. 箇条書き部分を選択し, 右クリック, [箇条書き]->[箇条書きと段落番号] をクリックする.
  3. [箇条書きと段落番号] というダイアログが出るので, 下にある [色] を [自動] から [黒] に変更する.
  4. あとは, [OK] をクリックし, スライドマスタを閉じる.

この方法は, 大学の後輩のA君から教えてもらった.

2015-02-24

携帯メール・プロバイダメールは安全なの?

某サービスサイトでは, 「2013年6月10日より、セキュリティ強化の一環で、携帯アドレスの登録を推奨しています」と書いてある. このサイトでは, 携帯メール > プロバイダメール > フリーメールの順でセキュリティが高いということになっていて, それぞれの段階に応じて, 受けられるサービスが異なっている. でも, 実際のところは本当にそうなのか?

まず携帯メールに関しては, パスワードの総当り攻撃は難しいのが現状であると思う. 多くの携帯キャリアは, 自ネットワークからしかメールサーバへアクセスできないようにしているので, 攻撃者が外部からメールを盗むことは難しそうだ. でも, 最近は状況が変わってきているように思う. 各キャリアがWiFi経由での接続を推奨する傾向にあるので, メールサーバへインターネット経由でアクセスできるようにする必要が生じている. 具体的な問題の事例を挙げるなら, ドコモのSPモードメール誤配送, SPモードメールに脆弱性などがある.

プロバイダメールはどうか... いわゆるプロバイダメールは, インターネットサービスプロバイダ (ISP) の提供するメールをいうが, 多くはPOP3やIMAPに対応していて, そのISPの外部からでもアクセスできることが多い. フリーメールと何ら変わらないのではないか. 中小のISPも多いので, むしろ, セキュリティは後手に回っているのではないか.

フリーメールは, 大手が運営していることが多く, セキュリティには敏感になっているように思う. 攻撃はたくさんうけているとしても, その対策にも力を入れているはずだ.

三井住友銀行インターネットバンクの他人のアカウントを凍結させる方法

三井住友銀行のインターネットバンクでは, ログインパスワードをなんどか間違えるとアカウントを停止させる措置をとるらしい.

ところで, 三井住友銀行の場合は支店番号と口座番号でログインできる. 支店番号や口座番号は, 某オークションの取引などで相手に伝えることもあるものなので, なかば公開された情報とも言える.

だれか悪意のある人が, 支店番号・口座番号・デタラメなパスワードをいれてなんどかログインを思考するだけで, 攻撃対象の人のインターネットバンクアカウントを停止させることが可能.

なお, 他の銀行 (三菱東京UFJ, みずほ, りそな, 住信SBI, 楽天など) では, 口座番号でのログインはできないので, このような問題はないだろう.

2015-02-21

Pythonなどのライトウェイト言語からウェブページのフォームを操作

定期的な送金をネットバンクで行うといった操作を定期的に行う場合, スクリプトで自動的に処理できたらいいなと思うことがある. 調べていると, Seleniumというツールキットを使うことで, PythonをはじめRubyやJavaから, ウェブページを開いたりフォームを操作することができることが分かった.

Selenium というのは, ウェブサイトのテストを目的として作られたらしく, ブラウザを起動して, URLを開いたりフォームの操作ができるらしい.

RHEL7では, 以下のようにしてインストールできる.

  1. PIPをEPELからインストール
    $ sudo yum --enablerepo=epel install python-pip
  2. SeleniumをPIPでインストール
    $ sudo pip install -U selenium
  3. Firefoxドライバをインストール
    geckodriverのリリースから最新版を取得する。
    cd /tmp
    wget https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz
    cd $HOME/.local/bin
    tar xzf /tmp/geckodriver-v0.31.0-linux64.tar.gz
    
これで, このページに載っているようなサンプルが動いた.

ブラウザを叩くのでJavascriptなどにも対応しており, 動作状況を見ることができるのが長所だ. だが, ブラウザを動かすためにXサーバが必要なので, 最小構成のサーバには不向きかも.
ヘッドレスのサーバで動かすなら, 予めVNCサーバなどを起動しておくのが良いだろう. そして, Cronから起動するときに, 環境変数DISPLAYを設定する.

import os
os.environ['DISPLAY'] = ':1.0'
VNCサーバのウィンドウマネージャには, twmを使用してはいけない. twmでは, webdriver.Firefox() のところで, 新しく作られたウィンドウの配置場所選択の状態で停止してしまう. ウィンドウマネージャは何も使わないか, XFCEなどにするのが良い. また, xlockの動作中でも, 失敗した. 私の~/.vnc/xstartupを以下に例示する.
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
# TWM blocks window created by selenium so that I do not use any window managers.
# twm &

余談だが, 定期的な送金を自動で行いたい場合, 住信SBIネット銀行がおすすめ. 定額自動振込の機能がすでに提供されている.

2015-02-18

USB電力不足時のメッセージ

Linux マシンに機器を接続した場合, もし電力不足のときは, 以下のようなメッセージがカーネルのバッファに出る. コマンドdmesgで確認できる.
[332998.456775] usb 3-1.3: new high-speed USB device number 5 using xhci_hcd
...
[332998.469247] usb 3-1.3: rejected 1 configuration due to insufficient available bus power
[332998.469251] usb 3-1.3: no configuration chosen from 1 choice

Excelの複数セルに渡った様式に散文を入れる

事務的な手続きをしていると, 各種様式がExcelのシートで送られて来ることがある. その中でも入力に苦労するのが, 長い文章を入力する枠が, 複数のセルにわかれているもの. 1行が1セルに対応しているが, セル毎に文字を入れると, 印刷時に幅が綺麗に揃わないし, そもそも1箇所変更するとそれ以降すべてを入力し直さなければならない:-(

こんなとき, 複数行を入力できるテキストボックスを使うと少しは楽になる.

  1. セルの高さが何ポイントかを予め調べておく.
  2. まず, テキストボックスを作る. 背景を透明にすると, 上記の例のように点線が引かれているようなフォーマットでもOK.
  3. 右クリックし「段落(P)...」を選ぶ.
  4. 「インデントと行間隔」というタブに行間隔を設定できるので, ここで「固定値」を選び, 予め調べておいた高さを入力する.
    なお, 印刷するとずれるので, 印刷プレビューを見ながら微調整が必要.
これで, 以下のように入力することができる.

2015-02-17

故障したHDDのSMART

あるサーバのHDDの異常で動作が怪しくなった. fsckを使ってなんとか起動したが, SMARTを見てみると, 以下のようになっていた.
=== START OF INFORMATION SECTION ===
Device Model:     ST31000524AS
Serial Number:    xxxxxxxx
Firmware Version: HP64
User Capacity:    1,000,204,886,016 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Tue Feb 17 19:06:41 2015 JST
...
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   088   086   006    Pre-fail  Always       -       15941795
  3 Spin_Up_Time            0x0023   100   100   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       58
  5 Reallocated_Sector_Ct   0x0033   001   001   036    Pre-fail  Always   FAILING_NOW 4094
  7 Seek_Error_Rate         0x002f   078   060   030    Pre-fail  Always       -       71770086
  9 Power_On_Hours          0x0032   082   082   000    Old_age   Always       -       16194
 10 Spin_Retry_Count        0x0033   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       58
180 Unused_Rsvd_Blk_Cnt_Tot 0x002b   100   100   000    Pre-fail  Always       -       1721951280
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0033   100   100   097    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0032   001   001   000    Old_age   Always       -       1901
188 Command_Timeout         0x0032   100   094   000    Old_age   Always       -       38655819799
189 High_Fly_Writes         0x003a   099   099   000    Old_age   Always       -       1
190 Airflow_Temperature_Cel 0x0022   074   066   045    Old_age   Always       -       26 (Lifetime Min/Max 26/26)
194 Temperature_Celsius     0x0022   026   040   000    Old_age   Always       -       26 (0 11 0 0)
195 Hardware_ECC_Recovered  0x003a   051   021   000    Old_age   Always       -       15941795
196 Reallocated_Event_Count 0x0032   001   001   036    Old_age   Always   FAILING_NOW 4094
197 Current_Pending_Sector  0x0032   100   097   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       207
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0

SMART Error Log Version: 1
ATA Error Count: 200 (device log contains only the most recent five errors)
        CR = Command Register [HEX]
        FR = Features Register [HEX]
        SC = Sector Count Register [HEX]
        SN = Sector Number Register [HEX]
        CL = Cylinder Low Register [HEX]
        CH = Cylinder High Register [HEX]
        DH = Device/Head Register [HEX]
        DC = Device Command Register [HEX]
        ER = Error register [HEX]
        ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.

Error 200 occurred at disk power-on lifetime: 16194 hours (674 days + 18 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 00 ff ff ff 0f

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  60 00 08 ff ff ff 4f 00      01:41:47.658  READ FPDMA QUEUED
  2f 00 01 10 00 00 00 00      01:41:47.625  READ LOG EXT
  60 00 08 ff ff ff 4f 00      01:41:44.947  READ FPDMA QUEUED
  60 00 08 f0 74 87 4e 00      01:41:44.928  READ FPDMA QUEUED
  60 00 08 e8 74 87 4e 00      01:41:44.918  READ FPDMA QUEUED
...
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%        17         -
# 2  Short offline       Completed without error       00%         4         -
# 3  Extended offline    Aborted by host               90%         2         -
どうやら, 数週間前から, 以下のようなログが /var/log/messages に出ていたようだ.
Feb  7 13:34:49 localhost smartd[3459]: Device: /dev/sda [SAT], 1 Currently unreadable (pending) sectors
Feb  7 13:34:49 localhost smartd[3459]: Device: /dev/sda [SAT], 207 Offline uncorrectable sectors

2015-02-13

pLaTeXのコードをオンラインでコンパイル

pLaTeXのコードをオンラインでコンパイルして, SVGやEMFでダウンロードできるサイトがある: tex2svg/emf.

こういうのがあると, コマンドをサーバで実行できないものかと考えたくなる. (他人のサーバに送ると不正アクセスとなる可能性があるので, 手元のLaTeXで検証してみた.)

\write18を使う方法:

\documentclass{article}
\immediate\write18{ls > scriptoutput.tex}
\begin{document}
\input{scriptoutput.tex}
\end{document}
以下のように, \write18は制限されているとメッセージが出た.
 restricted \write18 enabled.

Runpopenを使う方法:

\documentclass{article}
\begin{document}
\input{|"/bin/ls"}
\end{document}
これもダメ
runpopen command not allowed: /bin/ls
どうやら, platexを実行するときにオプション--enable-pipes --shell-escapeを付けないといけないらしい.

2015-01-31

Google Play ミュージック: ライブラリからの削除・アルバム内の曲順

Google Playミュージックのバージョン5.7.1788Q.1634597を使っているのだが, ライブラリ関連の処理がだめ:-(

アルバム内の再生順序の設定が明示されていないが, 試行錯誤で方法を見つけた. また, 一度ライブラリに登録してしまうと, ライブラリから消すのがたいへんだ.

アルバム内の曲順

アルバム内の曲順は, 以下のキーの優先順位でソートされるらしい.
  1. ID3TAGのトラック番号
  2. ID3TAGのタイトル
  3. もしID3TAGが付いていなければ, ファイル名
じつは, トラックとトラックの間が不連続で変だなと思っていた. 曲順がばらばらになっていることに気づいた. トラック番号をつければ良いだけだった. それにしても, なんでタイトルでソートしたんだろう? タイトルが曲順になっていることって殆ど無いと思うのだが. ファイル名をもう1つ上にしてほしい.

アルバムやファイルの削除

アルバムや曲を削除するには, 以下の方法をとる. ファイルを消しても, ライブラリにデータが残っていて, タップすると「リクエストされたトラックを再生できませんでした」と出る.
  1. ファイルを削除する (AndExplorerなどをつかう)
  2. 端末を再起動
また, [設定][アプリケーション][Google Playミュージック] から, [強制停止], [データを削除] を試したが, 一度ライブラリに登録されると消えない.

ファイルのID3TAGを編集した場合, 一度ファイルを削除して, 端末を再起動し, ファイルを追加し直す必要がある.

2015-01-30

Linux上で注釈を書けるPDFビュワー

Lifehackerに, OkularというPDFビュワーが紹介されているのを見つけた. 注釈の表示もできて便利だ. 見やすさでは Adobe reader にはかなわないが...

2015-01-29

RHEL7: pdftops が両面印刷できないPSを生成する

RHEL6 では,
$ lpr a.pdf
$ pdftops a.pdf -| lpr
によってPDFを印刷できた. しかし, RHEL7でこの方法を使うと, 印刷はできるものの, 両面に設定しても, 片面で印刷されてしまう. どうやら, 出力されるPSの上の方に, pdfSetupPaper というマクロがあるのだが, この実装が悪いらしい. 1ページごとにページサイズを設定するのだが, ページサイズが設定されるとプリンタが両面印刷せずに排紙してしまうようだ.

もうすぐパッチが適用されると思うのだが, 待ちきれなかったので, 自分でビルドしてしまった.

対処1: sedでページを設定する pdfSetupPaper を除去する. 以下のコマンドを pdftops と lpr の間にいれる.

sed -e "s/ pdfSetupPaper/ pop pop/"

Popplerのバグジラで議論されているが, そのパッチを適用する. 他にもいろいろなパッチが出ていたのだが, pdfSetupPaper のパッチだけにした.

$ yumdownloader --source poppler
$ rpm -ivh poppler-0.22.5-6.el7.src.rpm
$ cd ~/rpmbuild/SOURCES/
$ wget -O poppler-pdfSetupPaper.patch https://bugs.freedesktop.org/attachment.cgi?id=91005
$ cd ../SPECS/
$ vim poppler.spec
$ rpmbuild -ba poppler.spec
$ cd ..
$ sudo rpm -Uvh RPM/x86_64/poppler*.rpm

以下にspecファイルの更箇所を示す.

--- poppler-orig.spec 2014-02-15 01:11:43.000000000 +0900
+++ poppler.spec 2015-01-31 00:08:23.569595075 +0900
@@ -1,7 +1,7 @@
 Summary: PDF rendering library
 Name: poppler
 Version: 0.22.5
-Release: 6%{?dist}
+Release: 6%{?dist}a
 License: (GPLv2 or GPLv3) and GPLv2+ and LGPLv2+ and MIT
 Group: Development/Libraries
 URL:     http://poppler.freedesktop.org/
@@ -16,6 +16,9 @@
 # https://bugzilla.redhat.com/show_bug.cgi?id=1053616
 Patch2:  poppler-0.22.5-rotated-words-selection.patch
 
+# https://bugs.freedesktop.org/attachment.cgi?id=91005
+Patch3: poppler-pdfSetupPaper.patch
+
 Requires: poppler-data >= 0.4.0
 BuildRequires: automake libtool
 BuildRequires: gettext-devel
@@ -134,6 +137,7 @@
 %patch0 -p1 -b .CVE-2013-4473
 %patch1 -p1 -b .CVE-2013-4474
 %patch2 -p1 -b .rotated-word-selection
+%patch3 -p1 -b .duplex
 
 iconv -f iso-8859-1 -t utf-8 < "utils/pdftohtml.1" > "utils/pdftohtml.1.utf8"
 mv "utils/pdftohtml.1.utf8" "utils/pdftohtml.1"
@@ -256,3 +260,6 @@
 
 
 %changelog
+* Thu Jan 1 2015 My Name  - 0.22.5-6a
+- pdfSetupPaper macro modified
+

2015-01-28

GHOST 脆弱性のセキュリティアップデート後に

今回の脆弱性は, gethostbyname に見つかって, 任意のコードが実行される可能性があるというもの. glibcのアップデートが必要なのだけれど, アップデートの後, この共有オブジェクトをリンクしているサービスすべてを再起動しないといけない.

一番安全なのは, OSを再起動することなのだけれど, そう簡単にOSすべてを再起動するわけにはいかない場合もあるだろう. こういうとき, 古い (削除済みの) 共有オブジェクトをリンクしているプロセスを探すことができると便利である.

以前にも記事を書いたが, 再掲する. RHEL 5, 6, 7 では, 以下のようなコマンドで, 探すことができる.

sudo sh -c 'grep "\.so.*deleted" /proc/*/maps' | cut -f3 -d/ | xargs ps
/proc/*/mapsにマッピングの状況 (共有オブジェクトやその他いろいろ) が出てくるので, この中で, deleted とラベルがついたものを探す. ただ, 拡張子「.so」がついたものだけを探さないと, 誤検出してしまう.

dvips -> ps2pdf を使うと, GNUplot のタイトルがPDFに設定される

GNUplotが出力するEPSからSDictを削除するには, 以下のようにする.
$ sed -i '/^SDict begin \[$/,/^end$/d' *.eps
このページを参考にした: gnuplot breaks LaTeX PDF title (SOLVED)

2015-01-26

アクセス先でフィッシング行為を検出しました

Chromeでフィッシングサイトにアクセスしてみたら, こういう表示がでた. その上, フォームを送信するたびにこの表示. Firefoxも同じような振る舞い.

こういうサイトには, ランダムなIDやパスワードをいれて送信しておけば良いだろうと思う. 以下のようにしてフィッシングの警告を解除する.

  • Firefoxの場合, 設定のセキュリティタブにある「攻撃/偽装サイトとして報告されているサイトをブロックする」のチェックを外す.
  • Google Chromeの場合, 設定のプライバシーにある「フィッシングや不正なソフトからの保護を有効にする」のチェックを外す.

gnome-terminal から他のターミナルを開くと変な文字が表示される

xfce4-terminal をつかってみると, 「[user@host1 ~]$ 」とプロンプトがでるはずなのに, 以下のように余分なものがついた.
 ]7;file://host1.example.com/home/user[user@host1 ~]$ 
$ ssh localhost で出なくなったので, なにかの環境変数が悪さをしていると疑われる.

結局のところ, VTE_VERSION=3406 という環境変数が問題だった. xfce4-terminal を gnome-terminal から起動していて, そのとき紛れ込んでいた.

2015-01-22

latexdiff におけるプリアンブルの処理

LaTeX の差分を LaTeX のフォーマットで作成ツールとして, latexdiff というものがある. これをつかっていて気づいたのだが, プリアンブルはマークアップされないらしい. 著者の部分を変更したら, 以下のように, 変更後だけが残されて, 変更前のものはコメントアウトされてしまった.
%DIF 52c52
%DIF <  Old
%DIF -------
    New %DIF > 
%DIF -------
このサイトで質問が出ていて, この回答の一つによると, GNU Wdiffを使うと良いらしい.

2015-01-21

F-05D android 4.0.3 root化の可能性

2014年4月にアップデートされたV13R42Cで, 万歩計の脆弱性によるroot化ができなくなった. ところで, 先月に脆弱性が公開された. root権限で任意のコードを実行できるらしいので, root化の可能性が見えてきたが, だれかためさないかな...

2015-01-20

LaTeX: 外部のリファレンス

LaTeX にて, 他のソースファイルにつけたラベルを参照したい場合がある. このような場合, xr (eXternal References) というパッケージを使うと良い.
例えば, 論文のリプライレターにおいて, 「X.X節にXXXを追記しました」などと書く場合, 本文にかいたlabelを参照した方が間違いを減らせるだろう. 章構成の変更 (章を追加するなど) が予定されている場合でも安心である.

以下に例を示す.
ファイル aaa.tex に以下のように記載があったとする.

\section{Experimental setup} \label{sec:setup}
これを, ファイル別のソースファイルから参照する場合, 以下のように書く.
% プリアンブル
\usepackage{xr}
\externaldocument{aaa}
...
% 本文
In Sect.~\ref{sec:setup}, ...
\externaldocumentはプリアンブル (\begin{document}の前) に書く必要があるらしい.

無料のインターネットFAXを試してみた

Android や iPhone は電話回線につながるので, アプリで, 携帯電話回線を通してFAXを送れたら良いのにと思うことがある. 同じ事を考える人もいるのだが, そういうアプリは見つからない.

代わりに, インターネットFAXというのが普及していることがわかった. これなら, PCからFAXを送れるようなので, 携帯電話を使うより便利かな...

PamFax というサービスを使ってみた. カード情報などを入れることなく, FAXを送ることができた. 初期登録からFAX送信完了まで8分くらい. カード情報を入れなくて良いので安心. A4を1ページ送ろうとしたら「$0.07」とでてきて慌てたが, 初期登録で$0.33分使えるようになっていて, 結局は無料だった. たくさん送るなら, クレジットカード決済が必要らしい.

coreutils の hostid

Coreutils に hostid というコマンドがついている. ホスト毎に固有の32ビット識別子を表示するらしい.

この識別子をどのように計算しているのだろうと思い, ソースを見てみた.
下記のように gethostid の返り値を表示するだけ.

  id = gethostid ();
  id &= 0xffffffff;
  printf ("%08x\n", id);
それで, gethostid はなんだろうとマニュアルを見ると, 「通常は gethostbyname により返されるローカルマシンの Internet アドレスが代わりに使用され...」と書いてあり, 「バグ: 識別子が世界中で一意であることを保証することはできない」とも書いてある.

結局のところ, ローカルIPアドレスを16進数で表示するだけ.

2015-01-19

ATQの結果を日時でソートする

Linux では, 指定した日時に処理を行う機能を atd というサービスが提供している. このジョブ一覧を表示するのが atq だが, 出力順がソートされていない. 例えば, 以下のように表示される.
$ atq
169     2015-02-28 20:23 a hoge
205     2015-01-19 22:00 a hoge
189     2019-02-06 00:13 a hoge
188     2015-11-06 00:12 a hoge
201     2015-01-26 16:00 a hoge
185     2015-09-30 18:54 a hoge
197     2015-01-20 16:00 a hoge
199     2015-01-22 16:00 a hoge
165     2015-01-29 12:59 a hoge
200     2015-02-16 18:31 a hoge
これを日付順にソートするには, 第2列をキーとしてソートすれば良いので, 以下のように sort -k2 へパイプする.
$ atq | sort -k2
205     2015-01-19 22:00 a hoge
197     2015-01-20 16:00 a hoge
199     2015-01-22 16:00 a hoge
201     2015-01-26 16:00 a hoge
165     2015-01-29 12:59 a hoge
200     2015-02-16 18:31 a hoge
169     2015-02-28 20:23 a hoge
185     2015-09-30 18:54 a hoge
188     2015-11-06 00:12 a hoge
189     2019-02-06 00:13 a hoge

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 を使う.