2015年5月31日日曜日

キーボードの特定のキーが入力できなくなった

Mac mini Mid201(2.4GHz Intel Core 2 Duo)にLogicoolのdiNove Edge (紹介記事 : http://k-tai.impress.co.jp/cda/article/stapa/36013.html) というBluetoothキーボードを接続して使ってます。今朝、メールなどを書こうとすると「H」が入力できなくなっていました(他のキーは、すべては試していませんが入力できます)。

Mac miniを再起動しても入力できないままです。キーボードの不具合かと思い、Mac Book Pro 13" Retinaに接続してみると、こちらでも「H」が入力できません。
壊れているなら失うものはありませんし、日曜日なので秋葉原に新しいものを買いに行くとこともできると思い、回復をがんばってみることにしました。
最初に試したのはアルコールです。電源を切り、消毒用エタノールを「H」キーの周りに噴霧して「H」キーを何度も押してみました。そして、扇風機でアルコールを飛ばしてから、電源を入れると…、うれしいことにこの最初の手段で回復しました。

ただ、「H」キーはCtrl-H(左削除)でよく使っているので、キースイッチの寿命なのかもしれません。近いうちに、新しいキーボードを予備として買っておこうかと思います。

2015年5月29日金曜日

Apple オンラインストアでの支払いを銀行振込にする

会社でApple製品を購入しようとして、Appleオンラインストアを利用しようとしました。製品を選びカスタマイズをしてから、支払い手続きに移行すると、銀行振込の選択肢がありません。
法人向けの支払いの説明ページ
法人向けお支払い方法のご案内
http://store.apple.com/jp/help/business_payments
をみると、
法人向け銀行振込をお電話でお申し込みいただけます。
とあり、オンラインでの手続きはできないようです。
しかたがないので、製品の発送先などを記入するところにある「チャット」を利用して、問い合わせてみました。すると、
  • 銀行振込はオンラインからは選べない
  • 担当者から連絡させるので、会社名、担当者名、電話番号、メールアドレスを教えて欲しい
ということでした。そこでこれらの情報を伝えたところ、約30分から1時間後に電話がありました。そこでは、
  • 購入したい製品とその構成を口頭で伝える
  • 構成内容がメールで送られてくる
  • これでよければ、メール中にある振込先情報にしたがって振込
  • 実際に口座に振込が行われた日の翌営業日にAppleが確認して生産指示(たとえば木曜日の16:00に振り込んだとすると金曜日に振り込まれ、確認は翌営業日である次週の月曜日で、そこから生産指示)
というやり取りをしました。
以前は、オンラインで手続きができたので、それと比べると不便になりました。このようになった理由はよくわかりませんが、もしかしたら、店頭では売られていないCTOモデルを大量に販売した、もしくは一般の客からカスタマイズ情報を訊き、客に代わって注文、その手数料を取るというような会社があったのかもしれません。

またApple Developer Programの費用についても同様に問い合わせたところ、WWWサイトで提示される支払いの選択肢、クレジットカードかitunesカードのみという回答でした。

2015年5月16日土曜日

MacOS X(10.9)で常にverbose modeで起動する

MacOS X 10.9で常にverbose modeで起動するには以下のようにします(10.8や10.7でも同じだったと思います)。
$ cd /Library/Preferences/SystemConfiguration
$ ls
CaptiveNetworkSupport
NetworkInterfaces.plist
com.apple.Boot.plist
com.apple.PowerManagement.plist
com.apple.accounts.exists.plist
com.apple.airport.preferences.plist
com.apple.network.eapolclient.configuration.plist
com.apple.smb.server.plist
com.apple.smb.server.plist.lockfile
com.apple.wifi.message-tracer.plist
preferences.plist
$ sudo cp com.apple.Boot.plist com.apple.Boot.plist.ORG
$ sudo vi com.apple.Boot.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Kernel</key>
    <string>mach_kernel</string>
    <key>Kernel Flags</key>
    <string>-v</string>
</dict>
</plist>
Kernels Flagsキーに「-v」を追加します。

一時的にverbose modeで起動するには以下のようにします。
Intel ベースの Mac で利用できる起動時のキーコンビネーション
https://support.apple.com/ja-jp/HT201255
起動時に「command + V」キーを押す。 Verbose モードで起動します。

2015年5月10日日曜日

MacOS XのTerminal.appでmoshを使う(英語環境の場合)

moshをFreeBSD(9.1と9.2)とMacOS X(10.9.5)でインストールした話の続きです。
FreeBSDとMacOS Xでmoshを使う
http://www.sakashita-net.jp/2015/05/freebsdmacos-xmosh.html

MacOS Xのターミナル.appでmoshを使う(日本語環境の場合)
http://www.sakashita-net.jp/2015/05/macos-x1095appterminalappmosh.html
先の記述は、システム環境設定/言語と地域/優先する言語で「日本語」を最優先としている場合にはうまく動きます。しかし、「言語と地域」で「English」を最優先にしている場合には、もう少し設定が必要です。
私の場合、仕事で米国の方にMacOS Xでの設定を伝える必要があり、画面写真を送る時などにメニューの表記などが英語になるように、「English」を有線にしています。
上記の記事にある記述のままで、ターミナルからmoshを起動すると、以下のような表示になってしまいうまく動きません。
mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",

The client-supplied environment (LC_CTYPE=UTF-8) specifies
the character set "".

LANG=
LC_CTYPE=UTF-8
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Connection to ホスト名 closed.
/usr/local/bin/mosh: Did not find mosh server startup message.
よく見てみると、LC_CTYPEがUTF-8という謎の値になっています。本来であれば、en_US.UTF-8になっていなければなりません。試しに、Terminal.appの設定で「Set locale environment variables on startup」のチェックを外して起動してみると、次のようになります。
mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",

The client-supplied environment ([no charset variables]) specifies
the character set "US-ASCII".

LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
LANGなど環境変数に何も設定されていません。検索エンジンで調べてみると次のようなWWWページが見つかります。
Setting locales correctly on Mac OSX Terminal application
http://blog.remibergsma.com/2012/07/10/setting-locales-correctly-on-mac-osx-terminal-application/
ここでもLC_CTYPE環境変数がUTF-8となってしまうと書かれています。しかし、このWWWページにある解決先、「Set locale environment variables on startup」にチェックを外すとLANGには何も設定されていない状態になってしまい、うまくいきません。たぶん、MacOS Xのバージョンが違い、動作が違っているのでしょう。

もう少し調べてみると、次のようなページが見つかります。
システムワイドなロケール設定 ~ Mac OS X (その2)
http://d.hatena.ne.jp/flying-foozy/20140204/1391520123
ここでは、以下のように書かれています。
GUI 経由でアプリを起動した場合、起動されたプロセスに対して、ロケール系環境変数は設定されません。GUI 経由でのアプリ起動では、シェルが介在していないので、~/.bashrc 等での設定も意味を持ちません。
GUI 経由で起動される全てのアプリに対して、ロケール系のものを含めた、環境変数設定を行うには、設定ファイル /etc/launchd.conf を使用します。
ということで、「Set locale environment variables on startup」にチェックを外したままで、/etc/launchd.confを作成し、以下のように記述します。
setenv LANG en_US.UTF-8
記述方法は、さらに以下を参考にしました。
launchd で Homebrew を自動アップデート
http://kymmt90.hatenablog.com/entry/launchd_brew
これでよいかと安心していると、次のようなWWWページを見つけました。
launchd で Homebrew を自動アップデート(Yosemite 編)
http://kymmt90.hatenablog.com/entry/launchd_brew_yosemite
以下のような記述があり、MacOS XをYosemita(10.10.x)に変更するとうまく動かなくなるようです。
Yosemite では /etc/launchd.conf という lanunchd 設定ファイルが廃止されている(バグ?)ことがわかりました。
これは困ります。回避方法を検索してみると、次のようなWWWページがありました 。
Setting environment variables via launchd.conf no longer works in OS X Yosemite?
http://stackoverflow.com/questions/25385934/setting-environment-variables-via-launchd-conf-no-longer-works-in-os-x-yosemite
ここではAppleScriptとUsers&GroupsにあるLogin Itemsを使う方法が紹介されています。
To avoid this, launch AppleScript Editor, enter a command like this:
do shell script "launchctl setenv variablename value"

(Use multiple lines if you want to set multiple variables)

Now save (+s) as File format: Application. Finally open System SettingsUsers & GroupsLogin Items and add your new application.
そこでApplication/UtilitiesフォルダにあるAppleScript Editorを起動し、中ほどの入力欄に以下のように書き込みます。
do shell script "launchctl setenv LANG en_US.UTF-8"
そして/Users/ユーザー名/Applicationフォルダに名前をつけて保存します。これだけでは実行できないので[Export...]メニューからApplication形式で書き出します。次に、Systems Preferences/Users&Groupsで自分自身のアカウント選び、Login Itemsに先ほどのApplication形式で書きだしたApple Scriptファイルを追加します。
これで、英語環境でもmoshをterminal.appから使えるようになりました。

うまくLANG環境変数が設定されているかは、わざと「Set locale environment variables on startup」にチェックをしてmoshを起動してみるとわかります。
mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",

The client-supplied environment (LC_CTYPE=UTF-8) specifies
the character set "".


LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_COLLATE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=
LANGは確かにen_US.UTF-8になっていて、LC_CTYPEは「Set locale environment variables on startup」にチェックをしているために、UTF-8になってしまっています。

英語環境でTerminal.appが正しくen_US.UTF-8と設定してくれるなら、このような苦労は不要なのですが、残念です。

2015年5月9日土曜日

MacOS Xのターミナル.appでmoshを使う(日本語環境の場合)

moshをFreeBSDとMacOS Xでインストールした話の続きです。
FreeBSDとMacOS Xでmoshを使う
http://www.sakashita-net.jp/2015/05/freebsdmacos-xmosh.html
上記の設定で、MacOS Xのターミナルで開いたコマンド行からは使えるようになりました。次は、ターミナルのプロファイルに登録して使うようにしてみます。
ターミナル.appの設定を開き、プロファイルを追加します。この中の[シェル]タブの起動欄で
  • コマンドを実行にチェックを入れる
  • 入力欄には「mosh ユーザー名@ホスト名」
と設定し、さらに[詳細] タブの言語環境で
  • 文字エンコーディング: Unicode(UTF-8)
  • 起動時にロケール環境変数を設定にチェック
  • Unicode東アジアA(曖昧)の文字幅をW(広)にするにチェック
として、このプロファイルで起動してみます。すると
[コマンドが見つかりません:mosh]
[新しいプロセスを作成して擬似 tty を開くことができませんでした。]
となってしまいます。 その下の「シェル内で実行」をチェックしてから起動すると、今度はうまくいきます。しかし「シェル内で実行」の場合、リモートのホストからログアウトすると、手元のMacのシェルに戻ってしまいます。できれば、sshのようにターミナル.appのウィンドウが閉じられて欲しいところです。入力欄で
mosh ユーザー名@ホスト名 && exit
として回避することはできますが、ややいまいちです。

コマンドが見つかりません:mosh」と出ているので、ターミナル.appが内部で保持するPATH環境変数にmoshがインストールされているディレクトリ /usr/local/bin が含まれていないのかもしれません。そこで、起動するコマンドを
/usr/local/bin/mosh ユーザー名@ホスト名
とし、「シェル内で実行」の チェックを外してから起動してみると、今度はうまくいきます。

sshのポート番号を変えている場合は
/usr/local/bin/mosh --ssh="ssh -p 2222"
としたいところですが、
/usr/local/bin/mosh: Server-side port or range (10022") is not valid.
となりうまくいきません([シェル]タブで、「シェル終了時:ウィンドウを閉じない」と設定しておくとエラーメッセージを見ることができます。)。
内部でうまくコマンド行をパースできていないのかもしれません。なのでsshに対するオプションはMacOS X側の~ユーザ/.ssh/configファイルで
Host ホスト名
    Port    2222
などと設定する必要があります。

p.s. 上記の記述は、システム環境設定/言語と地域/優先する言語で「日本語」を最優先としている場合です。ここで「English」を最優先にしている場合には、以下の設定が必要です。
  • ターミナル.appの設定で「起動時にロケール環境変数を設定」のチェックを外す
  • /etc/launchd.confを作成し、以下のように記述する
    setenv LANG en_US.UTF-8
以下を参考にしてください。

FreeBSDとMacOS Xでmoshを使う

FreeBSD(9.1と9.2)とMacOS X(10.9.5)でmoshを使うように設定しました。

moshの紹介は以下にあります。
Moshを使ってみる
http://rcmdnk.github.io/blog/2014/06/30/computer-linux-mac/
よいのは次のような点です(上記のblogから引用させていただきます)。
  • Moshは特にMobile端末からsshでどこかのサーバーへ接続して ネットワークがとぎれとぎれ担ってしまうような場合にも 接続を維持できる様に(自動で再接続)してくれるプログラムです。
  • 接続認証にはsshを使いますが、サーバー側、クライアント側両側で プログラムを動かして別のポートを使って接続を行い、維持するようにします。
  • これらのプログラムはmoshコマンド実行時に自動的にスタートするので、 サーバー側でも先に動かしておく必要はありません。
moshはシステムの環境としてUTF-8を要求するので、会社と自宅のサーバーがja_JP.eucJPだったときには使えませんでした。最近になり、両方ともLANG=ja_JP.UTF-8に変更したので、moshを使ってみることにしました。

変更の経緯は簡単に以下にまとめています。
FreeBSDでconvmvを使ってファイルシステムのファイル名をEUCからUTF-8へ変換する
http://www.sakashita-net.jp/2015/04/freebsdconvmveucutf-8.html
Macでのインストールは、上記のblogにあるように、
  1. homebrewをインストールする
  2. brew install mobile-shellを実行
とするだけで簡単でした。またFreeBSDについては、portsを使ったので以下のようにしました。
# cd /usr/ports/net/mosh
# make
# make install
動作は、まずFreeBSDとMacOS Xでターミナルから自分のホストにログインしてみて試しました(sshでのログインなどが可能になっていることが前提です)。
これがうまくいったので、次は、MacOS Xから自宅のサーバーへのログインです。

自宅のサーバーはNATの中にあるので、 インターネット接続用ルーターにポート転送の設定が必要です。moshはsshにポートに加えて、60000〜61000番のUDPポートを使います。
Mosh (mobile shell)
https://mosh.mit.edu/

Mosh will log the user in via SSH, then start a connection on a UDP port between 60000 and 61000.
この60000~61000番のUDPポートをサーバーに転送するように設定します。たとえば、ix2105では以下のようにします。
interface GigaEthernet0.1
ip napt service mosh サーバーIPアドレス none udp 60000-61000
このようにしておいてから、MacOS Xから自宅サーバーへログインしてみます。
macosx$ mosh ユーザー名@自宅サーバー

自宅サーバー$
ssh接続ができているならこれでよいはずです。 sshのポートなどを変更している場合は、以下のように、mosh内部で利用しているsshコマンドへの引数を指定できます。たとえばsshのポート番号を指定したい場合には、以下のようにします。
mosh --ssh="ssh -p 2222" ホスト

2015年5月3日日曜日

FreeBSDで特定のパッケージについてpkgでの自動的なアップデートを禁止する

インストールしているパッケージについて、バイナリでのアップデートをしたくない時があります。たとえばapache22でmod_proxyを使いたいと思っても、残念ながらバイナリパッケージにはmod_proxyが含まれておらず、portsを使う必要があります。そして、ふと、バイナリでのアップデートしてしまうと、うまく動かなくなります。そこで、
FreeBSDでpkg(8)を使うときの落とし穴
http://togetter.com/li/611632

メモ:FreeBSDでPHP-FPMを使っている場合、pkg upgradeするとPHP-FPMが削除されちゃうので、
pkg lock php5
でロックをかけておく。php5を更新したいときは
pkg unlock php5
してからportsで更新
のようにpkg lock/unlockをするようにしました。
# pkg info -I apache22
apache22-2.2.29_2              Version 2.2.x of Apache web server with prefork MPM.
# pkg lock apache22
apache22-2.2.29_2: lock this package? [y/N]: y
Locking apache22-2.2.29_2
# pkg unlock -l

Currently locked packages:
apache22-2.2.29_2
# pkg unlock apache22
apache22-2.2.29_2: unlock this package? [y/N]: ^C
#
pkg lock apache22でロック、pkg unlock apache22でアンロックできます。
これでバイナリのアップデートが行われなくなります。