2017-11-23

Firefox上の中ボタンクリックでURLを開く

URLをセレクションバッファに入れておき, Firefox上で中ボタンクリックすると, そのURLを開くことができる. (Linux上のFirefox 56頃までデフォルトでできた) Firefoxを56から57にアップデートした頃から, この機能が使えなくなったが, 以下の設定をabout:configに追加することで, 再び使えるようになった.
middlemouse.contentLoadURL;true

参考にしたページ

  • Mozilla Firefox middle mouse button does not work
  • 2017-11-08

    Pythonスクリプト中からインタプリタを起動

    Pythonスクリプトの途中でインタラプタを起動することができる. 開発中のスクリプトの例外処理に入れておくといった使い方が考えられる.
    $ cat a.py
    a = 10
    import code
    code.interact(local=globals())
    print 'a=%d'%a
    print dir()
    
    インタプリタ内から変数にアクセスするには, local=globals() という引数を与える. 上記のようなスクリプトを実行する.
    $ python a.py
    ...
    (InteractiveConsole)
    >>> a
    10
    >>> a = 20
    >>> b = 30
    >>> Ctrl-D
    ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b', 'code']
    
    例えば, 予め定義した a という変数を参照・上書きでき, 新たな変数 b を定義できる.

    2017-10-14

    XFCE4: 1つのデスクトップを2人で操作する

    XI2という機能によって, 2個以上のキーボード・マウスペアを別々に使用することができるようになった (らしい).
    色々と設定を試してみたが, かなり使いにくい. ウィンドウのフォーカス周りが何かと思い通りに動いてくれない.
    私が使用しているWMはXFCE4で, 他は試していない. 以下では, XFCE4での振る舞いを元に, 設定例を示す.

    概要

    マスターと呼ばれるディバイスがあり, キーボード・マウスのペアが提供される.
    フォーカスの移動の振る舞いが難解だが, Focus follows mouseに設定している場合, たぶん以下のような振る舞いだ.
  • あるマウスカーソルが1個も乗っていないウィンドウにマウスカーソルを移動させると, そのウィンドウにフォーカスが当たる.
  • フォーカスが当たると, どのマスターに属するマウスかによらず, 1個目のマスターのフォーカス当たるする.
  • あるマスターに属するマウスがあるウィンドウ上でクリックすると, すべてのキーボードのフォーカスが当たる場合と, そのマスターに属するキーボードのフォーカスだけが当たる場合がある.
  • 2番目以降のマスターに属するマウスがあるウィンドウ上でクリックすると, そのマスターに属するキーボードのフォーカスが当たる.
  • IBUSを使用できるのは, 1番目だけ.
  • ウィンドウのやサイズ変更ができるのは1番目のマスターだけ.

    用意するもの

    キーボード・マウスそれぞれ2個.
    以下では, Thinkpadのキーボード・マウスと, USB接続のマウス・キーボードを設定する例を示しながら説明する.

    設定方法

    2個のマスターを作成する. (名前は何でも良いが, ThinkPadのtpxと, USB接続のusbにした.)
    $ xinput --create-master tpx
    $ xinput --create-master usb
    
    Thinkpadのキーボード・マウスをマスターtpxに割り当てる.
    $ xinput --reattach 'AT Translated Set 2 keyboard' 'tpx keyboard'
    $ xinput --reattach 'TPPS/2 IBM TrackPoint' 'tpx pointer'
    
    これで, 2個のポインターが出てくる.

    上記の設定で, 構成は以下のようになる.

    $ xinput
    ⎡ Virtual core pointer                         id=2 [master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer               id=4 [slave  pointer  (2)]
    ⎜   ↳ Microsoft Microsoft® Nano Transceiver v1.0 id=14 [slave  pointer  (2)]
    ⎜   ↳ Microsoft Microsoft® Nano Transceiver v1.0 id=16 [slave  pointer  (21)]
    ⎣ Virtual core keyboard                        id=3 [master keyboard (2)]
        ↳ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
        ↳ Power Button                             id=6 [slave  keyboard (3)]
        ↳ Video Bus                                id=7 [slave  keyboard (3)]
        ↳ Sleep Button                             id=8 [slave  keyboard (3)]
        ↳ ThinkPad Extra Buttons                   id=11 [slave  keyboard (3)]
        ↳ Topre Corporation HHKB Professional      id=13 [slave  keyboard (22)]
        ↳ Microsoft Microsoft® Nano Transceiver v1.0 id=15 [slave  keyboard (3)]
    ⎡ tpx pointer                                  id=17 [master pointer  (18)]
    ⎜   ↳ TPPS/2 IBM TrackPoint                    id=10 [slave  pointer  (17)]
    ⎜   ↳ tpx XTEST pointer                        id=19 [slave  pointer  (17)]
    ⎣ tpx keyboard                                 id=18 [master keyboard (17)]
        ↳ AT Translated Set 2 keyboard             id=9 [slave  keyboard (18)]
        ↳ tpx XTEST keyboard                       id=20 [slave  keyboard (18)]
    
    Virtual core pointerに属するマウスでウィンドウの移動などを行える. 他のマスターで, ウィンドウをクリックしてフォーカスするウィンドウを選び, キーボード・マウスでそのウィンドウの操作ができる.
  • 特定のキーボードだけキー配列を変更する

    私はノートパソコンにUSB接続のHHKBを接続しているのだが, ときどきノートパソコン上のキーボードを使用することがある. このとき, Controlキーやバックスペースの違いにとまどうことがある. この回避策として, ノートパソコンのキーボードだけキーコードを変更する方法をメモする.
    使用しているOSは, Fedora release 25である.

    キーコードの変更手順

    キーの入れ替えには, setxkbmap を使用する. このコマンドは, どのディバイスに対して適用するかを指定できる.

    まず, キーを入れ替えるための設定ファイルを用意する.

    $ cat /usr/share/X11/xkb/keycodes/swapctrlcaps
    default
    xkb_keycodes "swapctrlcaps" {
            <LCTL> = 66;
            <CAPS> = 37;
    };
    
    $ cat /usr/share/X11/xkb/keycodes/swapbacks
    default
    xkb_keycodes "swapbacks" {
            <BKSL> = 22;
            <BKSP> = 51;
    };
    
    これで, 以下のコマンドにより, qwerty配列に対して上記のキー入れ替えができる.
    $ setxkbmap -keycodes 'evdev+aliases(qwerty)+swapbacks+swapctrlcaps'
    

    次に, xinput を使用して, 接続されたディバイスの一覧を取得する. (空白などを改変した)

    $ xinput
    Virtual core pointer                   id=2  [master pointer  (3)]
      Virtual core XTEST pointer           id=4  [slave  pointer  (2)]
      TPPS/2 IBM TrackPoint                id=10 [slave  pointer  (2)]
    Virtual core keyboard                  id=3  [master keyboard (2)]
      Virtual core XTEST keyboard          id=5  [slave  keyboard (3)]
      Power Button                         id=6  [slave  keyboard (3)]
      Video Bus                            id=7  [slave  keyboard (3)]
      Sleep Button                         id=8  [slave  keyboard (3)]
      AT Translated Set 2 keyboard         id=9  [slave  keyboard (3)]
      ThinkPad Extra Buttons               id=11 [slave  keyboard (3)]
      Topre Corporation HHKB Professional  id=13 [slave  keyboard (3)]
    
    このうち, AT Translated Set 2 keyboard だけに, キーコードの変更を行う.
    setxkbmap -device 9 -keycodes 'evdev+aliases(qwerty)+swapbacks+swapctrlcaps'
    
    これをスクリプトにすると, 以下のようになる.
    for id in $(xinput | awk '/AT Translated Set.*id=[1-9]/{print gensub(/.*id=([0-9]*).*/,"\\1",1)}'); do
            setxkbmap -device $id -keycodes 'evdev+aliases(qwerty)+swapbacks+swapctrlcaps'
    done
    

    補足: キーマップの異なるキーボードが混在する環境の設定

    もし, 日本語キーボード・英語キーボード混在の場合は, シンボルを設定するオプション -symbols を使用する. 以下の例では, id=9 に日本語, id=13 に英語の配列を割り当てる.
    setxkbmap -device  9 -symbols 'pc+jp+inet(evdev)'
    setxkbmap -device 13 -symbols 'pc+us+inet(evdev)'
    

    2017-09-21

    Fedora 25で誤ってlightdmを削除したら...

    Fedora 25で, lightdmを削除したら, グラフィカルログインができなくなってしまった.
    このようなときは, 以下の手順でグラフィカルログインできるようにする.
    $ sudo dnf install lightdm lightdm-gdk
    $ sudo systemctl enable lightdm.service
    $ sudo systemctl start lightdm.service
    
    パッケージ lightdm をインストールするだけでは, グラフィカルログインが有効にならない. systemctl で lightdm.service を有効にする設定をする.

    2017-09-16

    OBS StudioのOpenGL要件

    OBS Studioは, デスクトップやその他の映像をライブで編集・録画・ストリーミングできるソフトだ. OpenGLが使われており, 古いハードウェアでは動かない. LinuxをインストールしたThinkpad X201sで動かそうとすると, 「Failed to initialize video: Unspecified error」というエラーメッセージがでる. BBSの情報によると, Open GL 3.2 が必要らしい.
    よくウェブサイトをみたら, システム要件のページができている.

    2017-09-10

    Redhat系OSの壊れたシステムファイルを修復

    なぜかシステムのファイルが変更されてしまったときは, 以下の手順をとる.
    1. 変更されたファイルをつきとめる
      sudo rpm -Va
      
      変更されたファイルが出力される. フラグの「S」はサイズ違い, 「5」はMD5違い.
    2. ファイルを提供するパッケージ名を調べ, 再インストールする.
      rpm -qf /path/to/file
      sudo yum reinstall package_name
      

    補足: prelinkというツールがインストールされていると, バイナリファイルに共有オブジェクトをリンクしてしまう. rpm -Vaではprelinkの変更を戻してからmd5をチェックするらしい.

    何らかの理由で同じパッケージの異なるバージョンがインストールされてしまった場合, 以下のコマンドでそのようなパッケージを探すことができる.

    rpm -qa --qf '%{NAME}\n' | sort | uniq -c | grep -v '^ *1 '
    

    2017-09-09

    SL7をPXEなど使ってネットワークインストールする

    あるPCにSL7をインストールしたいが, USBメモリやCDRがなかったので, 別のマシンをネットワークブートのサーバに設定してインストールを行った. そのときの手順をメモ.

    今回のサーバは, SL6.7.

    TFTPとDHCPの設定

    まずは,tftp, dhcpd, iptablesの設定をする. なお, dhcpd自体は既に設定済みで, PXEの設定を追加するだけ.

    1. tftp-serverをインストールする.
      sudo yum install tftp-server xinetd
    2. tftpの設定を行う.
      sudoedit /etc/xinetd.d/tftp
      以下のように太字の2箇所を設定する. Disableをyesからnoに変更する. ログを見やすくするため, server_argsに-vを追加する.
      service tftp
      {
              socket_type             = dgram
              protocol                = udp
              wait                    = yes
              user                    = root
              server                  = /usr/sbin/in.tftpd
              server_args             = -v -s /var/lib/tftpboot
              disable                 = no
              per_source              = 11
              cps                     = 100 2
              flags                   = IPv4
      }
    3. Xinetdの再起動.
      sudo service xinetd restart
    4. Firewallの設定.
      sudoedit /etc/sysconfig/iptables
      以下の1行を追加する. PXEではUDPでリクエストが来るので, TCPは開放せず, UDPを開放する.
      -A INPUT -p udp -m udp --dport tftp -j ACCEPT
      設定が済んだら, iptablesを再起動して設定を読み込む.
      sudo service iptables restart
    5. DHCPDに設定を追加する.
      sudoedit /etc/dhcp/dhcpd.conf
      2個の設定 (next-serverとfilename) を追加する. Next-serverで指定するのがTFTPが動いているサーバのアドレス. Filenameで指定するのがPXEで最初に読み込むファイル. (後で取得方法を説明)
      authoritative;
      default-lease-time 3600;
      max-lease-time 14400;
      log-facility local7;
      subnet 192.168.xx.0 netmask 255.255.255.0 {
              range 192.168.xx.y1 192.168.xx.y2;
              option domain-name-servers 8.8.4.4,8.8.8.8;
              option routers 192.168.xx.1;
      
              # for PXE boot
              next-server 192.168.xx.yy;
              filename "pxelinux/pxelinux.0";
      }
      設定が済んだら, dhcpdを再起動する.
      sudo service dhcpd restart

    PXELinuxの準備

    SL7のSyslinuxというパッケージに含まれているので, ここから必要なファイルを取り出す. その後, 設定ファイルを記載する.
    1. 適当なミラーサーバから syslinux-4.05-13.el7.x86_64.rpm をダウンロードする.
      cd /tmp
      wget .../syslinux-4.05-13.el7.x86_64.rpm
    2. RPM仲のファイルを展開する.
      mkdir /tmp/syslinux
      rpm2cpio syslinux-4.05-13.el7.x86_64.rpm | cpio -dimv
      
    3. 必要なファイルをtftpbootの下にコピーする. なお, *.c32すべて必要なわけではなく, vesamenu.c32 だけあれば良い.
      mkdir /var/lib/tftpboot/pxelinux
      cp /tmp/syslinux/usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux/
      cp /tmp/syslinux/usr/share/syslinux/*.c32 /var/lib/tftpboot/pxelinux/
      
    4. Pxelinuxの設定ファイルを用意する.
      mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg/
      vim /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
      以下のように記載する.
      default vesamenu.c32
      prompt 1
      timeout 600
      display boot.msg
      
      label Scientific Linux 7.3 nouveau=0
              menu label Install SL 7.3 without ^Nouveau
              menu default
              kernel ../sl73/images/pxeboot/vmlinuz
              append initrd=../sl73/images/pxeboot/initrd.img nouveau.modeset=0 inst.repo=ftp://.../scientific/7.3/x86_64/os
      label local
              menu label Boot from ^local drive
              localboot 0xffff
      label memtest86
              menu label ^Memory test
              kernel memtest
              append -
      Kernelとinitrdは次の手順で準備する.
      inst.repoの設定には, 適当な ftp://ftp.scientificlinux.org/linux/scientific/7.3/x86_64/os/ のミラーを指定すればよい.

    Kernelとinitrdの準備

    1. まずは展開先のディレクトリを作成する.
      mkdir -p /var/lib/tftpboot/sl73/images/pxeboot
    2. 2個のファイルをダウンロードする.
      cd /var/lib/tftpboot/sl73/images/pxeboot
      wget ftp://.../scientific/7.3/x86_64/os/images/pxeboot/vmlinuz
      wget ftp://.../scientific/7.3/x86_64/os/images/pxeboot/initrd.img
      

    インストールを開始する

    インストール先のPCの電源をいれ, ネットワークから起動する.

    以下のサイトを参考にした.

  • BIOS ベースのクライアント向けに PXE サーバーを設定する

    SL 7 Rollingの追加設定

    SL 7 RollingのインストーラーをPXEで起動するため, 設定を追加した.

    pxelinux/pxelinux.cfg/default に以下のエントリーを追記

    label Scientific Linux Rolling nouveau=0
            menu label Install SL ^Rolling without Nouveau
            menu default
            kernel ../sl7-rolling/images/pxeboot/vmlinuz
            append initrd=../sl7-rolling/images/pxeboot/initrd.img nouveau.modeset=0 inst.repo=ftp://ftp.jaist.ac.jp/pub/Linux/scientific/7rolling/x86_64/os/
    
    Kernelとinitrdを準備
    $ mkdir sl7-rolling/
    $ cd sl7-rolling/
    $ wget -r -l 1 ftp://ftp.jaist.ac.jp/pub/Linux/scientific/7rolling/x86_64/os/images/ 
    $ wget -r -l 1 ftp://ftp.jaist.ac.jp/pub/Linux/scientific/7rolling/x86_64/os/images/pxeboot/  
    $ mv ./ftp.jaist.ac.jp/pub/Linux/scientific/7rolling/x86_64/os/images/* ./ 
    
  • 2017-08-15

    外国からの被仕向送金 (送金を受け取る) 手数料の安い銀行

    海外からUSDを受け取るとき, 手数料の安い銀行を探している. 調べた範囲をメモしておく. 少しづつふやしてゆく予定.
    銀行電信/小切手手数料外貨受取可能か?USDのスプレッドUSDの金利メモ
    三井住友信託銀行 電信のみ 無料 Yes 0.41円 (?) 0.3% 普通預金
    1.55% 1年定期預金
    ソニー銀行 電信送金 無料 Yes 0.15円 (往復) 0.3% 普通預金
    1.4% 2年定期預金
    JP Morgan Chase銀行または三菱東京UFJ銀行を中継銀行として指定する必要あり
    新生銀行 電信送金 無料 Yes 0.30円 (往復) 0.01% 普通預金
    1.9% 3年定期預金
    外貨預金の残高30万円以上でスプレッド0.18円
    Linux上のFirefoxからアクセスできないページあり
    大和ネクスト銀行 電信のみ 無料 Yes 0.50円 0.25% 普通預金
    1.5% 3年定期預金
    Citi bankを中継するらしい.
    50,000USD (550万円くらい) 以上受け取ると手数料をキャッシュバック.
    SMBC信託銀行
    横浜銀行 小切手 3000円/1枚 + 750円/1手続き 円で受取
    送金手数料が無料である点と金利で比べると, 三井住友信託銀行の外貨預金口座で受け取るのが良さそう. 店舗は少ないが, インターネットで為替手続きができ, コンビニのATMで手数料無料で円預金から引き出せる.

    ソニー銀行はスプレッドが小さいが, 中継銀行でのリフティングチャージがかかる可能性がある. やってみないとわからないので, 口座開設してみた. 半年後くらいに試してみる. (仕向送金の方は, 外貨預金が500万円以上あると月1回無料.)

    大和ネクスト銀行の手数料キャッシュバックの効果が出てくるのは, 50000USDを受け取り, 早めに円に両替する予定で, 送金側の手数料が4500円を超える場合. もし長めにUSDで保有するなら, 三井住友信託銀行の方がさらに有利になる.

    比較的店舗の多い銀行で, USD建て小切手で受け取るなら, 横浜銀行が良いだろう.

    SMBC信託銀行 (旧Citi bank) は, 三井住友信託銀行と名前が似ているが別の銀行らしい. 小切手の取り立ても横浜銀行より少し安いようだ.

    2017-07-26

    Inkscape 0.92 changes px/inch

    Inkscape 0.92になって, 1インチあたりのpxが90から96に変更された. これに伴って, 古いInkscapeで作成したSVGファイルを開くと
    Old Inkscape files use 1in == 90px, CSS requires 1in == 96px.
    Drawings meant to match a physical size (e.g. Letter or A4)
    will be too small. Scaling the drawing can correct for this.
    Internal scaling can be handled either by setting the SVG 'viewBox'
    attribute to compensate or by scaling all objects in the drawing.
    
    というメッセージが出るようになった.

    私の場合は, 回路図などを単位をpxにして10pxグリッドで描いていた. その設定を維持したかったので, Ignore を選べば良いことが分かった. あるいは, SVGをエディタで編集して, svgタグの属性inkscape:versionを以下のように書き換えてもOK.

    inkscape:version="0.92+devel unknown"
    

    2017-07-01

    with構文で定義したターゲット変数のスコープ (Python)

    この記事でwith構文と等価なtry-finally文が紹介されていたのを読んで, ターゲット変数のスコープはどうなるのだろうと思って確かめてみた.

    以下のように, with構文を出た後でもターゲット変数 f にはアクセスできるようだ.

    >>> with open('/tmp/x.dat', 'w') as f:
    ...  print f
    ...  f.write('hello\n')
    ... 
    <open file '/tmp/x.dat', mode 'w' at 0x7f9eaf982c00>
    >>> print f
    <closed file '/tmp/x.dat', mode 'w' at 0x7f9eaf982c00>
    
    
    上記は, Python 2.6.6 で試した.

    2017-06-25

    LaTeX 表の中のセルに改行を入れる方法

    LaTeXの表で改行を入れる方法としてよく紹介されるのは, 罫線を部分的に消して, 次の行と一体化しているように見せる方法である. 一方で, この方法では, ひとつのセルの情報がソースコード中ではバラバラになってしまうので, わかりにくい.

    ここでは, 別の方法, 表を入れ子にする方法を紹介する.

    ソース:
    \begin{table}
     \center \begin{tabular}{|c|c|c|} \hline
      & A & B \\\hline\hline
      a &
      \begin{tabular}{l}
        n: 0.0 -- 0.5 \\
        p: 1.2 -- 0.7
      \end{tabular} &
      \begin{tabular}{l}
        n: 0.0 -- 0.6 \\
        p: 1.2 -- 0.6
      \end{tabular} \\\hline
     \end{tabular}
    \end{table}
    
    出来上がり:

    2017-06-19

    TrackRの誇張記事

    スマートフォンから自分の自動車の位置を知る方法という記事をみつけた.
    TrackRのサイトを読んでみたが,
  • 距離表示機能: Bluetoothでスマートフォンと接続しておよその距離を表示,
  • Crowd Locate: ほかのTrackRユーザーが近くにいれば彼らから位置情報を共有してもらう という機能らしい.

    Techiefansの記事は誤解をもたらしているように思える.
    たぶん, 盗まれたバイクや自転車を探すとか, 迷子の猫を探すとかといった使い方には向かないだろう. 街中にTrackRユーザがいるわけではないのだから.

    世界中で追跡できるとしたら, GPS受信機と3Gモデムくらいが付いていると期待するかもしれないが, そういう機能込みで, こんな小さいサイズで1年間もバッテリー駆動できるはずがない.

  • 2017-06-18

    Firefoxのスムーズスクロールを無効にする

    Firefoxにスムーズスクロールの機能があるが, 個人的には無駄な機能だと思っているので, 無効にした.

    about:configをURLとして打ち込み, general.smoothScrollをダブルクリックしてfalseに設定する.

    スムーズスクロールってこんなにデメリットがあると思う.

  • 先を見たいからスクロールするのに, スムーズスクロールが働いている間, 待たされる.
  • CPUリソースを消費する.
  • あえてメリットを挙げるとしたら, これくらいかな.
  • これまで見ていた箇所がどこまでスクロールしたのかわかりやすい.
  • タッチパネルで操作するときは, スワイプしただけでたくさん移動できて便利(かも). iPhoneで画面遷移のときにゆっくり動かしてみせる機能が契機かなと思う.
    次の画面をロードするときにユーザーを不快に思わせないことが目的だったので, 見た目だけ真似たのだろう.
  • 2017-06-17

    Microsoft Wireless Mobile Mouse 4000 を買った

    前のマウス (m705t) が使いづらかったので, 新しいマウスを買った.

    Logicool m705tよりはマシだと思う.

  • センサーの感度は良好. つるつるのところでも動作する.
  • 中ボタンのクリックが硬い. Xではセレクションからの貼り付けなので, 中ボタンクリックの操作性は重要.
    アサインを変更した. 戻るボタン (8番) に中ボタンを割り当てたが, やはり押しにくい. やや親指が届きにくいところにあるので, クリックしようとするとカーソルが動いてしまう.
  • ホイールの上下時, クリック感が無いのが斬新. 摩擦があって, 手で回すと回るが, 自然には回らない.
  • クリックやホイールを回すと, トラッキングLEDが明るくなって, コイル鳴きする. トラッキング中でないのにLEDが明るくなるのは無駄たと思う.

    マウスの使い勝手という点では, Thinkpadのトラックポイントの方が好きだ. (急がずに購入するなら, Lenovo ThinkVantage Clubに入って, 50%くらいの割引メールが届くのを待つのがおすすめ.)


  • 2017-06-14

    X-windowでマウスボタンの割当を変更

    マウスボタンの割当を変更する方法のメモ.

    まず, マウスのIDを調べる.

    xinput list
    
    戻るボタン・左右スクロールに下の表のように機能を割り当てる場合, 以下のxinputコマンドで設定する.
    xinput set-button-map 17  1 2 3 4 5 8 9 2 9 10 11 12 13 14 15 16
    
    なお, 上記の17は, xinput listで出てくるIDを書く.
    物理ボタン動作
    戻るボタン (8)中ボタン (2)
    左スクロール (6)戻る (8)
    右スクロール (7)進む (9)

    スクリプトで設定する場合は, 以下のように書けば良い.

    #! /bin/bash
    xinput list |
    grep 'Microsoft .* Nano Transceiver.*slave  pointer' |
    sed 's/.*id=\([1-9][0-9]*\).*/\1/' |
    xargs -I{} xinput set-button-map {} 1 2 3 4 5 8 9 2 9 10 11 12 13 14 15 16
    
    なぜかNano Transceiverが2つ認識されるので, 両方に対して同じ設定を行う.

    dvips + ps2pdfで日本語をタイプセットするためのメモ

    Fedora 24上のTeXLive 2017/platex + dvips + ps2pdf で日本語混じりのドキュメントをタイプセットするための設定方法をメモする. どういう変更をしたのか理解できていないが, 日本語が埋め込まれたPDFが生成されたようなので良しとする.
    なお, dvips+ps2pdfの代わりにdvipdfmxを使用すると, 一部の図が表示できなくなった.

    $ cat /usr/share/ghostscript/9.20/Resource/Init/cidfmap.ja
    /IPAexMincho << /FileType /TrueType /Path (/usr/share/fonts/ipa-mincho/ipam.ttf) /CSI [(Japan1) 6] >> ;
    /IPAexGothic << /FileType /TrueType /Path (/usr/share/fonts/ipa-ex-gothic/ipaexg.ttf) /CSI [(Japan1) 6] >> ;
    
    上記は, cidfmap
    (cidfmap.ja) .runlibfileifexists
    
    という行が見つかったので, 日本語のためにcidfmap.jaというファイルをインクルードしているのだろうと推測した. もともと, cidfmap.jaというファイルは見つからなかったので, cidfmapと同じディレクトリに作成. ipam.ttfとipaexg.ttfは, find /usr/share/fonts -name ipa*.ttfでパスを探しだした.
    将来GSのバージョンが変わった時は, 9.20の部分を新しくするべきなのだろう.

    以下のコマンドでPDFを生成する.

    platex -halt-on-error  -recorder  "main.tex"
    dvips -P pdf  -o "main.ps" "main.dvi"
    ps2pdf -dPDFSETTINGS=/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true  "main.ps" "main.pdf"
    
    生成したPDFのフォントを確認する:
    $ pdffonts main.pdf
    name                                 type              encoding         emb sub uni object ID
    ------------------------------------ ----------------- ---------------- --- --- --- ---------
    ...
    WWYGYS+IPAMincho                     CID TrueType      H                yes yes no     276  0
    ...
    
    IPAMinchoが埋め込まれている (emb=yes) ようだ.

    生成されるPSファイルには,

    %%DocumentFonts: NimbusRomNo9L-Regu NimbusRomNo9L-Medi rtxr rtxmi
    %%+ NimbusRomNo9L-ReguItal IPAexMincho-H rtxb txsy txex Times-Roman
    %%+ Helvetica Symbol Times-Italic Courier Helvetica-Oblique
    %%+ NewCenturySchlbk-Roman Times
    
    と書かれており, IPAexMincho-Hがあるので, IPAexMinchoを設定すれば十分なのだと思う.

    以下のサイトを参考にした.

  • ghostscript 日本語フォントの設定 -alprovs の記録; SL 6とUbuntu 16での設定方法が書かれている.
  • 2017-06-04

    Python: a == not b は構文エラー

    Pythonのドキュメントに意外なことがかいてあるのを見つけた. not は非ブール演算子よりも優先度が低いので、 not a == b は not (a == b) と解釈され、 a == not b は構文エラーです。 Cではa == !ba == (!b)と解釈されるので, Pythonでも同様だと思っていたが, 構文エラーになるらしい.
    >>> a = True
    >>> b = False
    >>> a == not b
      File "", line 1
        a == not b
               ^
    SyntaxError: invalid syntax
    >>> a == (not b)
    True
    

    なお, Awkではこうなる:

    $ :| awk 'BEGIN { a=1; b=0; print a==b; print a==!b }'
    0
    1
    

    2017-06-02

    私の歴代携帯電話

    機種OS購入日
    モトローラ M1000 (A1000のドコモ版)Symbian2005年
    HTC HT-03A (HTC Magicのドコモ版)Android 1.6 → 2.3?
    富士通 F-05DAndroid 2.3 → 4.02012年3月
    Sony Xperia Z5Android2016年6月
    iPhone 8iOS2019年10月

    2017-05-20

    xsetでスクリーンセーバとDPMSを設定する

    私は以下のように設定ている.

    DPMS (画面の電源を自動的に切る) の設定

    xset +dpms
    xset dpms 1200 1200 1200
    

    スクリーンセーバーの設定

    xset s blank
    xset s 3600
    
    スクリーンセーバーを無効にすると, ロックがかからなくなる.

    追記: xsetを使って設定したが, XFCE4ではXScreenSaverがDPMSの設定を上書きしていることが分かった. XSceeenSaverのDisplay Power Managementの設定が有効になるようだ.

    2017-02-24

    BuffaloのフレッツIPv6サービス対応機能の実際

    Buffaloの純正ファームを書き換えずにtelnetでログインできる方法を見つけたので, 中で何が起こっているのか見てみた.

    「フレッツIPv6サービス対応機能」をONに切り替えると何が変わるのか調べてみた.

    なんとなくブリッジの設定が変わっているきがして, brctl showを実行してみると, 以下のような違いになった.

  • フレッツIPv6サービス対応機能 OFF
    # brctl show
    bridge name     bridge id               STP enabled     interfaces
    br1             8000.000000000000       no              
    br0             8000.106f3ff74ec1       no              eth0
                                                            ath0
    
  • フレッツIPv6サービス対応機能 ON
    # brctl show
    bridge name     bridge id               STP enabled     interfaces
    br1             8000.000000000000       no              
    br0             8000.106f3ff74ec1       no              eth0
                                                            eth1
                                                            ath0
    
    ただ eth0 (有線LANのハブ側) と eth1 (WAN側) との間をブリッジしているだけのようだ.
    不用意にこの機能をONにすると, セキュリティ上・ネットワーク管理上のトラブルを招きかねない.

    あと, iptables -L の出力もOFF/ON間で比較してみたが, 相違なかった.

  • 2017-02-21

    Buffalo Air Station にデバッグモードで入る方法

    このサイトを読んでいたら, Buffaloの管理画面にデバッグモードで入る方法を見つけた.
    別のAir Stationでも使えるのではと思って, 手元にある WZR2-G300N で試した所, 見事にデバッグモードに入れて, 任意のコマンドを実行できることが分かった. ただし, どのAir Stationでも同じ方法とは限らないだろう.

    ログインするとき, 通常のユーザー名 (root) ではなく, 以下のように入れる.
    ユーザー名: bufpy
    パスワード: otdpopy通常のパスワード ("otdpopy" を設定してあるパスワードの前につける).

    管理設定のページにいくと, コマンド実行などができるリンクが表示される.

    2017-02-01

    Linux版Skypeで画面を共有する方法

    SkypeでPCの画面を共有することができるが, Linux版での方法をメモする.
    現時点で入手可能な最新版は skype-4.3.0.37 とかなり古いが, 画面を共有する機能も着いていた. Windows版の説明はSkypeのウェブサイトに載っているが, バージョンが古いせいかLinux版での操作方法がかなり違う.
    1. 通話を開始する.
    2. 連絡先一覧から, 下向き矢印, Share your Screenを順に選ぶ.
    3. Share Full Screen または Share Selectionを選ぶ.
    4. Share Full Screenを選ぶと, 画面全体を共有できる. もしデュアルスクリーンにしている場合は, 通話バーのウィンドウ (相手の名前などが出るウィンドウ) があるスクリーンだけが共有される.
    5. Share Selectionを選ぶと, Selectionの枠が表示され, その中身が共有される. Selectionの大きさの変え方は分からなかった.

    2017-01-22

    NEC PC-NS150/AA を分解

    知人のノートパソコン (PC-NS150/AA) が飲み物をこぼしたことによって故障したので, 分解してみた. 分解中の写真はないが, 簡単に手順を残しておく. 分解・組立後に思い出しながら書いているので, 間違っている点があるかもしれない.
    ウェブ検索して同じモデルの分解方法は見つからなかったが, NECの似たモデルの分解方法を参考にした.
    1. バッテリーを抜く. (濡れたときにすぐ外すべきだった)
    2. 裏側のネジをすべてはずす.
    3. HDD & メモリの蓋を外し, その中のネジ (4本) もはずす.
    4. HDDを外す. (後の作業時での落下防止)
    5. DVDドライブを外し, 新たに出てくるベゼルを固定しているネジ (3本) も外す.
      このサイトの手順12を参考にした: NEC PC-LS150F26W 分解方法:「分解修理方法(コツ)を手順を追って写真で解説」
    6. キーボードを外す. 上下にツメが付いているので, 1個づつ外してゆく.
      フレキの端子のロックがわかりにくいが, コネクタの黒い部分 (フレキの差し込まれている反対側) を上に上げるとロックが外れる.
    7. キーボードを外すと出てくるネジ (4本くらい) も外す.
    8. ベゼルを外してゆく. 上下左右にツメが付いているので, 1個づつ外してゆく.
    これで, メインボードにアクセスできるようになった. 飲み物が侵入したと思われる箇所が黒く焦げていた.