転載・引用について

ユーザ用ツール

サイト用ツール


os:osx:techmemo

文書の過去の版を表示しています。


MacOS-X 技術メモ

Last Update: 2018/04/09

MacOS-XはUNIX由来のシステムではあるが、それなりに違いもある。その部分に関して、メモを残しておく。

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」を参照してフォント設定等をするように設定すればいいのだ。

  1. 使うフォントをInstallする(ここでは、MiguとMigMixを使う事にする)
  2. まず、どこか(ここでは、ホームフォルダに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;
    }
  3. 環境設定→詳細→スタイルシートをクリックして、「その他」から、上で設置したファイルを選択する
  4. 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は取ってないので、その筋の有志が取ってくれると嬉しいなぁ。

定期メンテ

  1. diskutilでアクセス権の確認と復旧
  2. browser cacheのクリア
    • Google Chrome
      • Chrome>環境設定>詳細設定を表示…>[閲覧履歴データの消去]
    • Safari
      • Safari>環境設定>プライバシー>[すべての Web サイトデータを削除…]
    • Firefox
      • Firefox>環境設定>プライバシー>最近の機歴を消去
  3. 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をInstall
  • Install → 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の肥大化により動作が遅くなることがある。

以下を実行することで、若干なりとも高速化される。

  1. Mail.appを終了する
  2. Terminal.appを起動する
  3. 以下を実行
    1. cd ~/Library/Mail
    2. sqlite3 Envelope¥ Index
    3. sqlite>プロンプトが表示される
    4. vacuum subjects;を入力する
    5. sqlite>プロンプトが表示される
    6. ^Dで終了

以上

Mail.appで重複メールを処理

OSXのMail.appで重複メールを削除するツールを参照

これがツールです。以下にもともとのページの情報をサマリーしておきます。

  • ツールはperlスクリプト
    • Tiger以降、Mail.appのメール保存形式は「1メール1ファイル」。ファイルは12345.emlxのような感じで、拡張子emlxになる。
  • ツールはこれらのファイル群を検査し、メールヘッダ中Message-IDをキーに重複しているかどうかを判断する
  • 重複しているメールがあったらそれをプログラムが勝手に作ったディレクトリ(具体的にはDuplicateMessages)に移動
    • 削除はしない。もし問題があれば移動されたメールを元の位置に戻せばよい

使い方

  1. Mail.appを終了させる
  2. Terminal.appを起動
  3. Mail Directoryに移動
    • (例) cd ~/Library/Mail/POP-foo@example.com
  4. lsしてINBOX.mboxがあることを確認
  5. INBOX.mboxに移動
    • cd INBOX.mbox
  6. ツールをここに置く
    • cp some/where/chkemlx.pl .
  7. ツールを実行
    • perl chk_emlx.pl
  8. 適当にメッセージが出る
    • なにもメッセージが出ずにfiles:xxxなどと出力されたら、重複メールがなかったということ
  9. 重複メールは「DuplicateMessages」に移動される
    • もし問題があれば、DuplicateMessagesから元のディレクトリにコピーし直せばよい
  10. Mail.appを起動
  11. 該当のメール箱(ここでは受信箱)を選択
  12. メニューから「メールボックス>再構築」を実行
    • これで重複メッセージはなくなったはず。

メール検索をかけた時に同じメールが重複して表示され、重複した一方のメールは“存在しない”事になってしまっている場合の対処

  1. Mail.appを終了
  2. 「ホーム>ライブラリ>Mail>Envelope Index」を削除
  3. 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でもするんじゃない限りは、「これで十分じゃん」ということで。

自明だけど、悪用厳禁です。そうじゃないと消されてしまいそうだし。

無線LAN信号強度を表示する画面

使い方は、

  1. System → Library → CoreService → WiFi 診断 を起動
  2. ⌘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

いくつかの記号を素早く入力

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を利用すればよい。

  1. コピー元のディスクをドライブにセット
  2. DiskUtilitiesを起動
  3. 左側のリストからコピー元のディスクを選択
  4. 選択した状態で、「ファイル」メニューから「新規」、「(ディスク名)からのディスクイメージ」を選択
  5. イメージフォーマットの項目で「圧縮」か「読み出し専用」を選択(普通は圧縮で大丈夫)
  6. 保存をクリック
    • ディスク読み出され、Diskイメージが作成される
  7. Diskイメージが作成されたら元のディスクを取り出す
  8. DiskUtilitiesの画面左側のリストから、今作成したディスクイメージを選択
  9. 選択した状態で「イメージ」メニューから、「ディスクを作成」を選択
  10. 「ディスクを作成」ダイアログが表示される
  11. 空のDVDを挿入して「ディスクを作成」をクリックする
    • Disk作成開始

なお、いわゆる映像系DVDは試していないので注意。

ついでに以下の情報も。

  • MPEG Streamclip → Quicktime MPEG再生コンポーネントと組み合わせて利用
  • Capty DVD2 → 市販ソフト
  • Licuid CD → Disk Burner
このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
os/osx/techmemo.1523261727.txt.gz · 最終更新: 2018/04/09 17:15 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki