nkenbou のはまり日記

良い意味でも悪い意味でもはまっていることを書いていきます。内容はソフトウェア開発全般です。

Ubuntu 16.04 に Kindle for PC をインストールする

最近は電子書籍ばかり買っていて、PDF で提供されていれば問題がないのだけれど PDF がない場合はしかたなく Amazon で購入しています。 技術書の内容をちょっと試すには PC で読んでいたほうが都合がよいので UbuntuKindle をインストールしてみました。その時の覚書です。

この記事を書いたときのバージョン

Wine のインストール

Windows 版の Kindle for PC を Linux で動かすには Wine が必要です。Wine は 32 bit 版を使用します。

64 bit の Ubuntu を使用している場合は 32 bit アーキテクチャを有効にします。

$ sudo dpkg --add-architecture i386

Wine のリポジトリを追加します。

$ wget https://dl.winehq.org/wine-builds/Release.key
$ sudo apt-key add Release.key
$ sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/

リポジトリをアップデートして、Wine をインストールします。 Kindle for PC と Wine の動作する組み合わせのうち最新のものをインストールしてください。 組み合わせは WineHQ - Amazon Kindle for PC で確認することができます。 Platinum か Gold のものを選ぶとよさそうです。 今回は Wine 2.0 を使いたかったので、バージョンの近い winehq-stable (このときは v2.1 だった) をインストールすることにしました。

$ sudo apt-get update
$ sudo apt-get install --install-recommends winehq-stable

他にも winehq-devel (開発ブランチ)、winehq-staging (ステージングブランチ) があります。

Wine の設定

Ubuntu 16.04: WineでKindle for PC (Windows)を動かす - Narrow Escape によると Kindle for PC は Windows 7 または Windows 8.1 でないと動作しないようです。

Wine の設定画面を立ち上げます。途中で Mono、Gecko などのインストールが促された場合はそのままインストールしてください。

$ winecfg

設定画面から Windows VersionWindows 8.1 に設定します。

Kindle for PC のインストール

Kindle for PC は次の URL からダウンロードしてきました。 URL の 441831.17.44183 のあたりを調整すると他のバージョンもダウンロードできるようでした。

https://s3.amazonaws.com/kindleforpc/44183/KindleForPC-installer-1.17.44183.exe

Kindle for PC をインストールします。

$ wine KindleForPC-installer-1.17.44183.exe

これでインストールは完了です。

補足

ここからは捕捉です。 インストールがうまくいかなかった場合など必要があれば参照してください。

フォントが豆腐になった場合

MS 系のフォントを別のフォントに置き換えます。ここでは、Ubuntu に標準で入っている Takao 系のフォントを使用しています。

次の内容を任意のファイル名 (font-replace-takao.reg など) で作成します。 文字コードは CP932 または Shift_JIS にしてください。

REGEDIT4

[HKEY_CURRENT_USER\Software\Wine\Fonts\Replacements]
"MS Gothic"="Takaoゴシック"
"MS Mincho"="Takao明朝"
"MS PGothic"="Takao Pゴシック"
"MS PMincho"="Takao P明朝"
"MS UI Gothic"="TakaoExゴシック"
"MS ゴシック"="Takaoゴシック"
"MS 明朝"="Takao明朝"
"MS Pゴシック"="Takao Pゴシック"
"MS P明朝"="Takao P明朝"

regedit を起動しファイルをインポートします。

$ wine regedit

レジストリ > レジストリのインポート から作成したファイルをインポートします。

これで日本語が正しく表示されるようになりました。

インストールをやりなおす場合

インストールしてみてうまくいかない場合は環境をきれいにしてやりなおしたいと思いますが Wine はただアンインストールするだけではきれいになりません。 ここでは環境をきれいにする手順を説明します。

まず、アインインストールします。

$ sudo apt purge winehq-stable
$ sudo apt autoremove

残ったファイルを削除します。

$ rm -rf ~/.wine
$ rm -f  ~/.config/menus/applications-merged/wine-*
$ rm -rf ~/.local/share/applications/wine
$ rm -f  ~/.local/share/applications/wine-*
$ rm -f  ~/.local/share/desktop-directories/wine-*

まとめ

これで、Kindle 本を PC でも読めるようになりました。でも、バージョンアップするときはまたちょっと苦労するのかな…

参考文献

ThinkPad T440s を Ubuntu 14.04 から 16.04 にアップグレードした

以前、ThinkPad T440s へ Ubuntu 14.04 をインストールした - nkenbou のはまり日記 で構築したマシンを年末年始を利用して 16.04 にアップグレードしました。

基本的には Ubuntu のアップグレード通知から難なくアップグレード完了です。

問題の ClickPad (パコパコパッド) ですが、こちらも 14.04 の頃から時間が経っているためか今回は簡単に解決できました。

sudo apt-get install xserver-xorg-input-libinput

以上!

はまったら ThinkPad 買い換えてやろうかと思っていたけど (散財)、あっけないほど簡単にアップグレードできちゃいましたとさ。

Ubuntu 14.04 LTS で Emacs 24.5 をビルドする

普通にビルドすると必要なライブラリが足りないので、build-depを使って必要なライブラリを一気にインストールします。

まず、build-depを使えるようにします。

sudo apt-get install build-essential

その後、Emacs に依存するライブラリをインストールします。

sudo apt-get build-dep emacs24

後は、Emacs をビルドするだけ。

wget -O- http://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz | tar xJf -
cd emacs-24.5
./configure
make
sudo make install

参考:

Cygwin 版 Emacs の flycheck (JSHint) で JavaScript のシンタックスチェックをする

問題

CygwinEmacs で flycheck を使用して JavaScriptシンタックスチェックができるようにするまでには、いくつもの問題があり一筋縄では行きませんでした。

ここでは、試行錯誤して辿り着いた一つの方法を紹介します。なお、僕の環境は gnupack を使用しています。

実際の環境:

  • OS: Windows 7
  • Emacs: gnupack_devel-12.03-2015.02.01
  • flycheck: flycheck-20150412.242
  • Node.js: v0.12.2
  • JSHint: jshint v2.6.3

flycheck のインストール

flycheck のインストールは普通に行います。例えば package.el でインストールするには以下のようにします。

M-x package-refresh-contents

M-x package-install flycheck

Node.js のインストール

flycheck で JavaScriptシンタックスチェックを行う場合、裏では JSHint が使用されます。

JSHint は Node.js の npm コマンドでインストールします。CygwinEmacs を使用しているので、Cygwin 上に JSHint をインストールしたいところですが、Node.js の Wiki に書かれている通り、Node.js で Cygwin がサポートされなくなっています。

仕方がないので、Windows に JSHint をインストールして Cygwin 経由で JSHint を使用することにします。Node.js はインストーラーや nodist からインストールします。詳細なインストール手順は省略しますが、インストールが完了すると npm コマンドが使用できるようになっているはずです。

Node.js のインストーラー: https://nodejs.org/

nodist (GitHub): https://github.com/marcelklehr/nodist

JSHint のインストール

npm コマンドでグローバルに JSHint をインストールします。

npm install jshint --global

js2-mode のフックで flycheck-mode を有効にする

僕は JavaScript を書くときには js2-mode を使用しているので、js2-mode のフックで flycheck-mode を有効にします。

init.el:

(add-hook 'js2-mode-hook
          '(flycheck-mode t))

通常ならここまでの設定をすれば、JavaScript のバッファで flycheck が実行されるようになるはずですが、CygwinEmacs では動作しませんでした。flycheck-mode は有効になっているのですがチェック結果が表示されませんでした。

原因

flycheck が JSHint を呼び出すときは、対象のファイルを /tmp/flycheckXXXX/ にコピーして (XXXX 部分はランダム)、コピーしたファイルに対してチェックを行います 。JSHint へパラメーターとして渡されるファイルのパスは /tmp/flycheckXXXX/対象ファイル.js のようになります。しかし、/ (スラッシュ区切り) や /tmp/Windows では解析できないため、ERROR: Can't open /tmp/flycheckXXXX/対象ファイル.js のようにエラーになってしまいます。

解決方法

解決方法として思いついたのは、JSHint にパラメーターとして渡すファイルパスの / (スラッシュ区切り) や /tmp/ 部分を Windows 上のパスに変換してしまうことでした。試しに flycheck の中のファイルパスを取得する関数に advice を設定して Cygwin 上ファイルパス -> Windows 上ファイルパスに変換するようにしたところ、JSHint は正常に実行されるようになり結果も返ってきましたが、今度は結果をパースする flycheck の別の関数で新たな問題が発生しました。

JSHint からの結果にはチェック対象のファイルパス (JSHint へのパラメーターと同一) が含まれており、flycheck ではそのファイルパスを使ってチェック後の処理を行っていました。しかし、このファイルパスは JSHint に渡す前に Windows 上でのファイルパスに変換してしまっているので正常に処理できなくなっていました。

そこで、これも同じように JSHint からの結果に含まれる Windows 上ファイルパスを元の Cygwin 上ファイルパスに戻してしまえばよいと思い、advice を設定 (Cygwin 上ファイルパス -> Windows 上ファイルパスの変換の時とは別の関数に設定) して元に戻したところ正常に動作することが確認できました。

しかし、最終的には flycheck にいろいろ手を入れすぎるのは嫌だったので、JSHint を実行する前後でファイルパスの変換を行うシェルスクリプトを書いて flycheck からはそのシェルスクリプトを呼ぶように設定することにしました。また、--config オプションのファイルパスも Cygwin 上のファイルパス -> Windows 上のファイルパスに変換しています。

シェルスクリプト (ファイル名: flycheck-jshint-cygwin):

<2015-5-16 Sat>変更: .jshintrc が祖先ディレクトリに存在する場合しない場合の両方で動作するようにした。

#!/bin/bash

filename=$(cygpath -w ${@:$#})

if [ $# -eq 2 ]; then
    output=$(/c/nodist/bin/jshint $1 $filename)
else
    config=$(cygpath -w $3)
    output=$(/c/nodist/bin/jshint $1 $2 $config $filename)
fi

tmp_win=$(cygpath -w /tmp/ | sed -e 's/\\/\\\\/g')
output=$(echo "$output" | sed -e '/^\t*<file name=\".\+\">$/ {s|'${tmp_win}'|/tmp/|; s|\\|/|g}')

echo "$output"

flycheck-jshint-cygwin はパスの通ったところに配置してください。また、/c/nodist/bin/jshint の部分は実際の環境に合わせて jshint のコマンドがインストールされているパスを指定してください。

init.el に書く flycheck の設定:

(when (eq system-type 'cygwin)
  (flycheck-define-checker javascript-jshint
    "A JavaScript syntax and style checker using jshint.

See URL `http://www.jshint.com'."
    :command ("flycheck-jshint-cygwin" "--checkstyle-reporter"
              (config-file "--config" flycheck-jshintrc)
              source)
    :error-parser flycheck-parse-checkstyle
    :error-filter flycheck-dequalify-error-ids
    :modes (js-mode js2-mode js3-mode))
  )

flycheck の設定は flycheck 内に定義済みのものをコピーしてきて、使用コマンドを "jshint" -> "flycheck-jshint-cygwin" に書き換えることで定義を上書きしています。

flycheck-mode の有効化 + α

最後に js2-mode のフックで flycheck-mode を有効にします。

init.el:

(add-hook 'js2-mode-hook
          (lambda ()
            (flycheck-mode t)))
)

ここまでの設定で CygwinEmacsJavaScript の flycheck が動作するようになりました。

また、js2-mode で flycheck を使用する場合は js2-mode で標準で実行されるシンタックスチェックを無効にすることをおすすめします。

(add-hook 'js2-mode-hook
          (lambda ()
            (setq js2-mode-show-parse-errors nil)
            (setq js2-mode-show-strict-warnings nil)
            (flycheck-mode t)))
)

Ubuntu 14.04 上に VirtualBox で Windows 環境を構築する

今回 VirtualBox で、ホストを Ubuntu、ゲストを Windows の環境を作ってみました。

試した環境は以下の通りです。

VirtualBox のインストール

基本的なインストールは VirtualBox のサイト(Linux_Downloads – Oracle VM VirtualBox)に従ってインストールすれば OK です。日本語サイトでは Ubuntu で Virtualbox を使う を参考にさせていただきました。

/etc/apt/sources.list に以下を追加します。

deb http://download.virtualbox.org/virtualbox/debian trusty contrib

https://www.virtualbox.org/download/oracle_vbox.asc から Oracle public key をダウンロードします。

以下のコマンドで Oracle public key を追加します。

sudo apt-key add oracle_vbox.asc

以下のコマンドで VirtualBox をインストールします。

sudo apt-get update
sudo apt-get install virtualbox-4.3

ホストに Oracle VM VirtualBox Extension Pack をインストールする

USB 2.0 のサポートを有効にしたり、リモートデスクトップをサポートするために、ホストに Oracle VM VirtualBox Extension Pack をインストールします。

Downloads – Oracle VM VirtualBox から Oracle VM VirtualBox Extension Pack をダウンロードします。

ダウンロードしたファイルを実行してインストールします。

ゲストに 64-bit OS を選択できるようにする

仮想マシンの新規作成でゲストに 64-bit OS が選択できないことがあります。

これを解決するには BIOS の設定で BIOS - Security - Virtualization とメニューを選択していき、 Intel (R) Virtualization Technology に "Enabled"を設定します。

端末本来の解像度に設定する

最初はゲストのディスプレイが「汎用 非PnPモニター」になってしまい、ワイドディスプレイをフルに使えませんでした。

仮想マシン上のディスプレイでワイドモニタなどの解像度に対応するため、ゲスト OS に VirtualBox Guest Additions をインストールします。

インストール手順については VirtualBoxを大画面で使う(Guest Additions) を参考にしました。

仮想マシンにインストールする Windows

今なら、Windows 7, 8 の評価版が Microsoft からダウンロードできます。 評価に使うだけなら便利なのでおすすめです。

ダウンロードサイトは以下です。

http://technet.microsoft.com/ja-JP/evalcenter/dn407368

ThinkPad T440s へ Ubuntu 14.04 をインストールした

長年使ってきた X200 から T440s への乗り換えを行いました。 載せた OS は Ubuntu 14.04 LTS です。

スペックは以下の通り。

Ubuntu の Live USB を作成する

まずは、UNetbootin を使って、Ubuntu のインストール用 USB を作成します。 このツールUbuntu でも Windows でも公開されているのでお好きなものを使ってください。

Ubuntu での使用方法は以下のサイトを参考にしました。

UbuntuTips/Install/Unetbootinの使用方法 - Ubuntu Japanese Wiki

Secure boot を無効にする

次に、作成した Live USB を使用して Ubuntu をインストールしたいのですが、初期状態だとブート時に USB が選択できません。 原因は Secure boot が有効になっているためで、プリインストールされている OS (Windows) でしか起動できなくなっています。

以下の手順で Secure boot を無効にします。

PC の電源を入れて、"Lenovo" が表示されているところで F1 キーを押し BIOS の設定画面に入ります。 Security - Secure Boot とメニューを選択していき、Secure Boot を "Disabled" に設定します。

参考

UbuntuTips/Install/UEFI - Ubuntu Japanese Wiki

Ubuntu のインストール

いよいよ、Ubuntu のインストールです。 PC を起動し、"Lenovo" が表示されているところで F12 キーを押すと、ブートの選択肢が表示されます。 そこで、Ubuntu の Live USB を選択します。

あとは、Ubuntuインストーラーの指示に従ってインストールしてください。

ちなみに、パーティションは以下のように分割しました。

参考

UbuntuTips/Install/UEFI - Ubuntu Japanese Wiki

Install Ubuntu 14.04 alongside Windows 8.1 in 10 easy steps « Everyday Linux User

ディレクトリを英語名にする

ターミナルでパスを入力するときディレクトリが日本語名だと不便なので英語にします。

ターミナルから以下のコマンドを実行します。

LANG=C xdg-user-dirs-gtk-update

参考

【Ubuntu 14.04】ディレクトリを英語名に変更する | ざかしんく

CapsLock キーを Ctrl キーに置き換える

Emacs 使いにとっては定番作業。

ターミナルから以下のコマンドを実行して、キーボードプラグインを有効にします。

dconf reset /org/gnome/settings-daemon/plugins/keyboard/active

そして、以下のコマンドで、CapsLock キーを Ctrlキーに置き換えます。

dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"

CapsLock キーと Ctrl キーを入れ替える場合や、設定をもとに戻す場合については以下のサイトを参考にしてください。

UbuntuTips/Desktop/HowToSetCapsLockAsCtrl - Ubuntu Japanese Wiki

ClickPad (パコパコパッド)を快適に使えるようにする

悪名高きパコパコパッドの設定です。

いろいろなサイトにいろいろな設定方法がのっていたのですが、どれを試しても不十分かうまくいかないものばかりで、満足する方法を見つけるのに苦労しました。。心が何度も折れそうになった(実際に折れた)。

結局は

ScottGarman/thinkpad_t440s · GitHub

から一式ダウンロードして、中に含まれている "build_middle_click_driver.sh" を実行することでドライバーの設定ができました。

ただし、事前に fakeroot をインストールしておく必要があります。

sudo apt-get instal fakeroot

あとは、先ほどのシェルを実行するだけ。実行中の確認メッセージは全て "yes" です。

./build_middle_click_driver.sh

<2014-12-4 Thu>追記:

上記コマンドで、/etc/X11/xorg.conf.d/90-evdev-trackpoint.conf が作成されます。 このファイルを修正すると、ClickPad の設定を変更することができます。 僕の設定内容は以下の通り。

Section "InputClass"
        Identifier "Clickpad"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        # Synaptics options come here.
        Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
        Option "SoftButtonAreas" "77% 0 0 100% 45% 77% 0 100%"
        Option "AreaTopEdge"          "100%"
        Option "AreaBottomEdge"       "0"
EndSection

Section "InputClass"
        Identifier   "TrackPoint"
        MatchProduct "TrackPoint"
        MatchDriver  "evdev"
        Option       "EmulateWheel"       "1"
        Option       "EmulateWheelButton" "2"
        Option       "XAxisMapping"       "6 7"
EndSection

SoftButtonAreas の値の意味は以下の通りです。少しずつ変更して T440s でちょうど良い範囲に調整しました。

RightButtonAreaLeft RightButtonAreaRight RightButtonAreaTop RightButtonAreaBottom MiddleButtonAreaLeft MiddleButtonAreaRight MiddleButtonAreaTop MiddleButtonAreaBottom

それから、RightButtonAreaBottom、MiddleButtonAreaBottom と AreaTopEdge を 100% に設定して、ボタンを上下いっぱいに広げることでタッチパッド部分を無効にしています。

それでも、パコパコパッドは使いづらいです。昔の 左・中・右 にボタンが分かれているインターフェースが恋しい。さらにいえば、ThinkPad にパッドは不要です!

Lenovo さん、元に戻してくれないかな〜。もしくは、プログラマ用の ThinkPad を作って販売してほしいものです。でないと、次は Mac に浮気をしてしまいそう…。

*1:ブートローダーをインストールする領域

プログラミング用フォント Ricty

Emacs のフォントを Ricty にした。今までは、Adobe の Source Code Pro を使っていたが、Ricty は日本語もきれいとのことだったので導入することにした。

Ricty とは

RictyLinux におけるプログラミングに向いたフォント。 InconsolataとMigu 1Mという2つの等幅フォントの合成で、プログラミングに最適なフォントとして知られている。

その他にも、全角スペースが可視化されるため、コードにうっかり紛れ込むこともなくなる。

Ricty のインストール

ライセンスの都合上フォント用ファイルを配布できないらしく、フォント生成スクリプトを使ってインストールする必要がある。

インストール方法は、

git clone https://github.com/yascentur/Ricty

をしたのち、README.md をみてインストールする。