文書の過去の版を表示しています。
−目次
MacOS-X 技術メモ
macOS で tftpd
Network系Hardwareを管理していると、Firmwareを更新しなければならないことが稀によくあって、その時にtftpを使いたいことがある。
macOSでtftpdを起動
こんな感じ
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
起動されているか確認するには
sudo lsof -i:69
これで、以下のような出力を得られればOK
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME launchd 1 root 37u IPv6 0x7e0bc6654a4a7011 0t0 UDP *:tftp launchd 1 root 39u IPv4 0x7e0bc6654a4a7279 0t0 UDP *:tftp launchd 1 root 40u IPv6 0x7e0bc6654a4a7011 0t0 UDP *:tftp launchd 1 root 41u IPv4 0x7e0bc6654a4a7279 0t0 UDP *:tftp
配布用ファイルの設置
設定ファイルは /System/Library/LaunchDaemons/tftp.plist
内容を読む限り、配布用ファイルは/private/tftpboot
の模様。なので、ここに、必要となるFirmwareを設置。
sudo cp foobar.firmware /private/tftpboot/
tftpでアクセスする
以下のような感じ。
foo$ tftp tftp> connect 127.0.0.1 tftp> get foobar.firmware Received 40960 bytes in 0.2 seconds
なお、IPv6でもOKの模様。
tftpdを終了
- sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
- 不要なファイルは消去しておくこと
sshの秘密鍵をOS-XのKeychain Accessに登録
OS-Xでman ssh-add
していたら、-KなるOptionを発見した。
そういえば、むかーしむかしに見たような気もする。
<node> -K When adding identities, each passphrase will also be stored in your
keychain. When removing identities with -d, each passphrase will be removed from your keychain.
</note>
つまり、ssh-add -K
しておけば、その後はいちいちパスフレーズを入力しなくてもよくなる。
OS-XでConsoleから画面共有をOnにする
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw mypasswd -restart -agent -privs -all
なお、VNCのパスワードが設定されてしまうので、注意。Commandlineをよく見て、必要な部分を削除すること。
OS-X Developer Program利用時の注意
OS-X Developer ProgramでDeveloper PreviewのOS-Xを使っている場合、最終のGM SeedがInstallされたまま更新されない。
これは、最終盤のGM seedがReleaseと内容が変わらないためである。
しかし、この状態だと、その先のDeveloper Previewが使えない(少なくとも、10.10.1 GM → 10.1.2 には更新できなかった)。
これでは困るので、簡単に対処する方法
$ sudo softwareupdate --clear-catalog $ sudo softwareupdate --list
を実行することで、Software updateの状態が更新され、最終のreleaseをinstallできる。
これをinstallしたあと、developer seedをInstallし、Software updateを実行すれば、問題は解決する
OS-XのBashを自前で更新する方法
shell shockのおかげで、OS-XのSecurity対策がMicrosoftに比べて激烈に劣っている事と、昔の宣伝のせいでMacは安全だと言う神話が生き残っていて、そのせいでAppleは何もしない(に近い)ことが判明したわけだが、PC/ATを使う気になれない自分のような人間には、自前で対処する以外の方策が無いという結論に落ち着いた。
というわけで、しょうがないからその為の手順。
- 前提条件
- OS-XにXcode Developer Toolsを導入しておく事
- XcodeにCommandline toolsを入れておく事
- Self Updateの手順
- 以下を実行する
cd /tmp mkdir bash-fix cd bash-fix curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf - cd bash-92/bash-3.2 curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0 curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0 curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0 curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0 curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0 cd .. xcodebuild sudo cp /bin/bash /bin/bash.old sudo cp /bin/sh /bin/sh.old build/Release/bash --version # GNU bash, version 3.2.52(1)-release build/Release/sh --version # GNU bash, version 3.2.52(1)-release sudo cp build/Release/bash /bin sudo cp build/Release/sh /bin
注意:意味が分からない人はやらない事。
OS-Xの/bin/shと/bin/bash
/bin/sh と /bin/bash はサイズが微妙に違う。これは、OS-X(少なくともLeopard)はSingle Unix Specification に従っているからである。
具体的には、echo -n は /bin/bash では使えるが、/bin/sh では使えないらしい。
では、Compile時に異なるのは何か?だが、今のところ –enable-xpg-echo-default
が指定されているかどうか?の差らしい
lddがない
OS-Xにはlddコマンドがない。代わりに、otoolを使えば良い。otoolは色々なコマンドの集合体のようなツールだが、ldd相当のコマンドは otool -L
SafariでFont設定
今のSafariは表示フォントの設定等が出来ない。そのため、個人的にはかなりイライラしていたが、とりあえず多少改善できたので、メモを。
要するに、Safariが表示時に「自分用のcss」を参照してフォント設定等をするように設定すればいいのだ。
- 使うフォントをInstallする(ここでは、MiguとMigMixを使う事にする)
- まず、どこか(ここでは、ホームフォルダにetcというフォルダを作成する)にsafari.cssを置く
/* * Safari.css: Safari用 CSSファイル (~/etc/safari.css) * * Need font of * IPA Gothic: http://ipafont.ipa.go.jp * Migu/MigMix font: http://mix-mplus-ipa.sourceforge.jp */ /* Proportional fonts*/ @font-face { font-family: "Mig 1P"; src:url("mig-1p-regular.ttf") format("truetype"); } @font-face { font-family: "Mig 1C"; src:url("mig-1c-regular.ttf") format("truetype"); } @font-face { font-family: "MigMix 1P"; src:url("migmix-1p-regular.ttf") format("truetype"); } /* Monospace fonts */ @font-face { font-family: "IPAG"; src:url("ipag.ttf") format("truetype"); } @font-face { font-family: "Mig 1M"; src:url("mig-1m-regular.ttf") format("truetype"); } @font-face { font-family: "MigMix 1M"; src:url("migmix-1m-regular.ttf") format("truetype"); } /* Face Definition */ html, body { font-family: "Mig 1C", "Mig 1P", "MigMix 1P"; /* Need minimum 2 fonts */ font-size: 100%; font-weight: normal; line-height: 1.1; } pre, code, var, samp, kbd, tt, .mono { font-family: "Mig 1M", "MigMix 1M"; /* Need minimum 2 fonts */ font-size: 100%; line-height: 1.1; } pre code, pre var, pre samp, pre kbd, pre tt { font-family: "Mig 1M", "MigMix 1M"; /* Need minimum 2 fonts */ font-size: 100%; line-height: 1.1; }
- 環境設定→詳細→スタイルシートをクリックして、「その他」から、上で設置したファイルを選択する
- Safariを再起動(再起動しないと反映されない)
Fontの設定等はいつか。
OS-Xでsshdの待ち受けポートを変更する
MacOS-Xでリモートアクセスを許可すると、sshで接続できるようになる。
しかし、/etc/sshd_configをいじってもsshの待ち受けポートが変わらないので調べてみたら、/System/Library/LaunchDaemons/ssh.plist
を修正する必要があるということで、以下のように修正
<key>Sockets</key> <dict> <key>Listeners</key> <dict> <key>SockServiceName</key> <string>65535</string> <key>Bonjour</key> <array> <string>ssh</string> <string>sftp-ssh</string> </array> </dict> </dict>
このSockServiceNameの文字列sshを待ち受けたいport番号にかえればOK。なお、この例では65535にしているが、ポート番号は適当にどうぞ。
なお、当然、この変更を行った後で
% sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist % sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
を実行する事。そうしないと、変更が反映されないよ。ま、再起動でもいいけどね。
Mavericks Server VPN configuration
少なくとも、OS-X 10.9.1 までの Mavericks には、racoon に NAT Traversal の問題がある。そのため、Mavericks Server 3.0.1 では正しくVPNサービスが設定できないという罠にはまる。
対策は、ここを参照の事。
なお、racoonを置き換えるだけでは、この問題が解決しない。
これは、Server 3.0.1のServer.appが作成するConfigurationファイルがl2tpdにIPSec関連のparameterを与えるようで、このパラメータ設定のために、正しくvpndが動作しないからである。結果、IPSec的shared secretを見つけられず、VPNが動作しない。
従って、server.appによって設定を変更したら、必ず、
>
/Library/Preferences/SystemConfiguration/com.apple.RemoteAccessServers.plist
を再編集しなければならない。
将来的にracoonが正しく修正され、Server 3.0.1 が正しく修正された暁にはObsolateになるはず。が、それがいつになるかは、Appleの気持ち次第。
TCP的緊急対策
/etc/sysctl.confを作成し
net.inet.tcp.delayed_ack=0
を書き込む。
上記Linkに記載されている通り、Delayed ACKをOffにすると「本来は」不幸が待っていて、Web通信を前提にするならばNagleをOffにする方が良い。 OS-Xでは、Defaultで上記は3になっているので、恐らく Delayed Ackの待ち時間は200ms*3=600ms なのだろうと思う。
むしろ
net.inet.tcp.sendspace: 131072 net.inet.tcp.recvspace: 131072
をいじる方が良くて、
net.inet.tcp.delayed_ack=2 net.inet.tcp.sendspace=524288 net.inet.tcp.recvspace=524288
位にする方が良いと思われる。
でもBenchmarkは取ってないので、その筋の有志が取ってくれると嬉しいなぁ。
定期メンテ
- diskutilでアクセス権の確認と復旧
- browser cacheのクリア
- Google Chrome
- Chrome>環境設定>詳細設定を表示…>[閲覧履歴データの消去]
- Safari
- Safari>環境設定>プライバシー>[すべての Web サイトデータを削除…]
- Firefox
- Firefox>環境設定>プライバシー>最近の機歴を消去
- OS関連cacheのクリア
- OS-Xにはfont cache/icon cache/system cache等様々なCacheがあるが、こいつを時々クリアする。
- 「shift」キーを押しながら Mac を起動すると、「セーフブート」モードになり、自動的に各種キャッシュがクリアされる。
- あとは、再起動すればOK
メールに添付されてるファイルをアイコン表示にする
メールに画像やPDFなどが添付されている場合、メール.app はプレビュー表示する。 しかし、これ、個人的にはかなり鬱陶しくて、むしろ表示しないでくれと思ってしまう わけで…
というわけで、この機能を無効にしてアイコン表示に変更する方法。
ターミナルで以下を実行して、メール.app を再起動するだけ。
defaults write com.apple.mail DisableInlineAttachmentViewing 1
元に戻す場合は以下を実行し、メール.app を再起動。
defaults delete com.apple.mail DisableInlineAttachmentViewing
装飾されたメールをプレーンテキストで表示
HTMLメールとか、いわゆる装飾されたメールをプレーンテキストで表示する方法 * 装飾されたメールを表示中に command+option+P
PgUp/PgDown時にカーソルも移動
ファイルを開いている時に page up/fn+↑ や page down/fn+下 を押すと1ページずつ移動するが、カーソルが 移動してくれないため、何か入力すると元のページに戻ってしまう。こういう時には、option+fn+↑/↓で、移動先の ページの中央にカーソルが移動する。
検索時に改行やTabを
検索時に改行を含んで探したいことがある。こういうときは、検索窓で option+改行 とか option+TAB とか すると吉。探してくれる。
Finderで複数ファイルの情報を表示
複数のファイルを選んで Command+Option+i で表示される
YenとBackslash
dotファイルをいじる時にEmacsを使っていると Opt-¥ が Meta-¥ になってしまうので
\n
を入力する時に困る。なので、解決策
keyremap4macbookをInstallInstall → reboot → メニューバーのアイコン → Preference を起動Change Key → Search Windowsに¥
を入力 → for Japanese まで行くShift+0 to Backslash(\
)のCheckboxをOnに
これで、Shift-0で
\
が入力できるようになる。
JIS Keyboardは Shift-0に何も割り当てられていないので、これでOK。
最近のEmacsでは、標準で opt-¥
で \ が入力できる。
Mail.appを高速化する
Mail.appはバックエンドDBにSQLiteを使っている。SQLiteは時々バキュームしてあげないと、DBの肥大化により動作が遅くなることがある。
以下を実行することで、若干なりとも高速化される。
- Mail.appを終了する
- Terminal.appを起動する
- 以下を実行
cd ~/Library/Mail
sqlite3 Envelope¥ Index
sqlite>
プロンプトが表示されるvacuum subjects;
を入力するsqlite>
プロンプトが表示される^D
で終了
以上
Mail.appで重複メールを処理
これがツールです。以下にもともとのページの情報をサマリーしておきます。
- ツールはperlスクリプト
- Tiger以降、Mail.appのメール保存形式は「1メール1ファイル」。ファイルは12345.emlxのような感じで、拡張子emlxになる。
- ツールはこれらのファイル群を検査し、メールヘッダ中Message-IDをキーに重複しているかどうかを判断する
- 重複しているメールがあったらそれをプログラムが勝手に作ったディレクトリ(具体的にはDuplicateMessages)に移動
- 削除はしない。もし問題があれば移動されたメールを元の位置に戻せばよい
使い方
- Mail.appを終了させる
- Terminal.appを起動
- Mail Directoryに移動
- (例) cd ~/Library/Mail/POP-foo@example.com
- lsしてINBOX.mboxがあることを確認
- INBOX.mboxに移動
- cd INBOX.mbox
- ツールをここに置く
- cp some/where/chkemlx.pl .
- ツールを実行
- perl chk_emlx.pl
- 適当にメッセージが出る
- なにもメッセージが出ずにfiles:xxxなどと出力されたら、重複メールがなかったということ
- 重複メールは「DuplicateMessages」に移動される
- もし問題があれば、DuplicateMessagesから元のディレクトリにコピーし直せばよい
- Mail.appを起動
- 該当のメール箱(ここでは受信箱)を選択
- メニューから「メールボックス>再構築」を実行
- これで重複メッセージはなくなったはず。
メール検索をかけた時に同じメールが重複して表示され、重複した一方のメールは“存在しない”事になってしまっている場合の対処
- Mail.appを終了
- 「ホーム>ライブラリ>Mail>Envelope Index」を削除
- Mail.appを起動する
これで直るはず。
システム設定確認
良くわかってないけど、とりあえずメモとして
man scutil scutil --help scutil --dns
等など
Firewallの設定を初期化する
要するに設定ファイルを初期化する
sudo cp /usr/libexec/ApplicationFirewall/com.apple.alf.plist /Library/Preferences/com.apple.alf.plist
無線LANの信号強度を測定する
削除されました。残念。
時々、無線LAN(以下W-LAN)の信号強度を測定したいことがある。特に「本来は無線を使ってはいけない場所」に「オレオレ基地局を設置している不届き者が居ないかを確認する場合」や、「自分の使っているW-LANのChannel番号をTuningしたい」場合など。
この時に便利なのが、/System/Library/CoreServices/Wi-Fi Diagnostics.app。これを使うと、Mac上で今受信できる全ての基地局を表示してくれる。(Mountain Lionでのみ確認したが、Lionにもあるらしい)
今までは、iStumblerやKissMacを使っていたが、WEP Crackでもするんじゃない限りは、「これで十分じゃん」ということで。
自明だけど、悪用厳禁です。そうじゃないと消されてしまいそうだし。
使い方は、
System → Library → CoreService → WiFi 診断 を起動⌘N (ファイル → ネットワークユーティリティ) を起動して、WiFiスキャンを選ぶ
だけ。
不過視ファイルを表示させる方法
Terminalから
defaults write com.apple.finder AppleShowAllFiles -bool YES
し、Finderを再起動する
killall Finder
ただし、これだとかなりうっとうしい (デスクトップにまで dotファイルが表示される)ので、~/Libraryに移動するだけなら Finderの「移動」メニューで option キーを押す方が簡単。
OSX のコマンドラインから、wi-fi の情報をつかって位置情報を得る
ここからの転載。
MacでコマンドラインからWiFiスポットをスキャンする
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s
ということで、
use strict; use warnings; use utf8; use 5.012; use JSON; use LWP::UserAgent; my @addresses = do { my @lines = split /\n/, qx{/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s}; shift @lines; my @r; push @r, (split /\s+/, $_)[2] for @lines; @r; }; my $query = encode_json({ version => '1.1.0', host => 'maps.google.com', request_address => JSON::true, address_language => 'ja_JP', wifi_towers => [ map +{ mac_address => $_, signal_strength => 8, age => 0, }, @addresses, ], }); my $ua = LWP::UserAgent->new; my $res = $ua->post('http://www.google.com/loc/json', Content => $query); $res->is_success or die $res->status_line; use YAML; warn Dump decode_json($res->content);
でよいらしい。
ShortCut(ファイルのOpen/Close時)
- スペース
- 選択した項目をQuickLookで表示
- Command ⌘ + D
- デスクトップに移動する
- Command ⌘ Shift + H
- ホームフォルダに移動する
- Command ⌘ Shift + A
- アプリケーションフォルダに移動する
- Command ⌘ Shift + .
- 不可視ファイルの表示・非表示を切り替える
- Command ⌘ Shift + G
- Unixパスを入力してその場所へ移動する「フォルダへ移動…」を表示(パスはTabで補完可能)
- / ~
- フォルダへ移動をルートもしくはホームフォルダから始める
- Command ⌘ + R
- 選択した項目をFinderで表示
- Command ⌘ + F
- 開く・保存ダイアログ内のファイル検索フィールドへカーソルを移動
- Command ⌘ + .
- 開く・保存ダイアログを閉じる
Terminalに関するTips
- Terminal.appは、標準ではWindows FocusはわざわざWindowを選択する必要がある。これを、マウスカーソルのある位置のWindowにフォーカスをあてるようにする方法。
defaults write com.apple.terminal FocusFollowsMouse -string YES
- 自明だと思うが、YES を NO にすれば元に戻る
- なお、ここで配布されているsecrets(Preference Panel/システム環境設定)でも設定できる。
- ターミナルでの処理終了後Dockアイコンを跳ねさせ未読バッジをアイコンに表示、警告音も鳴らす方法
- コマンドの後ろに「&& tput bel」を付け加える
MacOS-Xに関するいくつかのTips
- Safe Boot
- フォントキャッシュが壊れたときなど、ある程度の初期化をしてくれる。詳細は Mac OS X:セーフモードで起動するを参照
- 微妙に確保されているメモリーを解放する
- ものかのさんのページにあるLibera Memoryを利用すると吉
- わかばマークのMacの備忘録に細かい記事と内容がある。
- Memory Tester Rember 日本語版
- KeyRemapper KeyRemap4MacBook
いくつかの記号を素早く入力
option + \ で、バックスラッシュ
option + 2 で、™
option + G で、©
option + J で、∆
option + R で、®
option + ` で、“
option + shift + ` で ”
option + [ で、‘
option + shift + [ で、’
option + shiftキー + K で、林檎マーク
などなど。
Resolver cacheを消す方法
Windows 2000/XP/Vistaの場合、DOS promptから
ipconfig /flushdns
MacOS X 10.1 – 10.4の場合、Terminal.appで
sudo lookupd -flushcache
MacOS-X Leopard 以降の場合、Terminal.appで
sudo dscacheutil -flushcache
mDNS responderを再起動する
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
MacOS-X で画面キャプチャ
command + shift + 4 マウスで範囲指定 | 矩形選択キャプチャ(png) |
command + shift + 4 space ウインドウをクリック | ウィンドウキャプチャ(png) |
control + command + shift + 4 | 矩形選択キャプチャ(クリップボード) |
control + command + shift + 4 space | ウィンドウキャプチャ(クリップボード) |
CD/DVD Diskをコピー
MacOS-XでDVDをコピー、複製する手順。
基本的にはDiskUtilitiesを利用すればよい。
- コピー元のディスクをドライブにセット
- DiskUtilitiesを起動
- 左側のリストからコピー元のディスクを選択
- 選択した状態で、「ファイル」メニューから「新規」、「(ディスク名)からのディスクイメージ」を選択
- イメージフォーマットの項目で「圧縮」か「読み出し専用」を選択(普通は圧縮で大丈夫)
- 保存をクリック
- ディスク読み出され、Diskイメージが作成される
- Diskイメージが作成されたら元のディスクを取り出す
- DiskUtilitiesの画面左側のリストから、今作成したディスクイメージを選択
- 選択した状態で「イメージ」メニューから、「ディスクを作成」を選択
- 「ディスクを作成」ダイアログが表示される
- 空のDVDを挿入して「ディスクを作成」をクリックする
- Disk作成開始
なお、いわゆる映像系DVDは試していないので注意。
ついでに以下の情報も。
- MPEG Streamclip → Quicktime MPEG再生コンポーネントと組み合わせて利用
- Capty DVD2 → 市販ソフト
- Licuid CD → Disk Burner