2013年1月14日月曜日

Macがスリープした後のSynergyの挙動を直す

前回の記事で書ききれなかった別の問題と解決法について書きたいと思います。

Windows側のマウスのスピードが速すぎる時がある


この現象が起きるのは、Macがスリープしてその後スリープ解除された場合です。スリープ解除後に、マウスをWindowsの画面に持って行くとマウスの移動速度が速すぎて使いづらいのです。
これは、Synergyの設定では対処できないようです。
これの対処には、Sleepwatcherというプログラムを使いました。
Sleepwatcherは、Macがスリープしたりスリープ解除(ウェイク)したりするのを監視して、そのタイミングであらかじめ指定してあるコマンドを実行するプログラムです。
Sleepwatcherは、MacPortsからインストールできます。また、作者のウェブサイトからもダウンロード、インストールできます。
私は、インストールにはMacPortsを使いました。

MacPortsでのインストール

MacPorts自体のインストールの説明は長くなりますので、既にインストールされていることを前提にします。以下のコマンドで簡単にインストールできます。

$ sudo port install sleepwatcher

実行後、sleepwatcherは /opt/local/sbin にインストールされます。

ダウンロード

作者のサイト http://www.bernhard-baehr.de/ からダウンロードできます。私はMacPortsでインストールしたのでプログラムのソースコードは不要だったのですが、設定ファイル(Ploperty Listファイル)の参考にダウンロードしました。

Property Listファイルの作成

SleepwatcherもSynergyと同様にlaunchctl経由で実行・停止の制御をします。そのためには、Property List (plist)ファイルの作成が必要です。一から作成するのは間違いが入る可能性も高くなるので、ダウンロードしたアーカイブファイルに含まれている 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>Label</key>
        <string>org.macports.sleepwatcher-localuser</string>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/local/sbin/sleepwatcher</string>
                <string>-V</string>
                <string>-s ~/.sleep</string>
                <string>-w ~/.wakeup</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>


上記の内容を、~/Library/LaunchAgents/org.macports.sleepwatcher-localuser.plist として保存します。簡単な説明は以下のようです。
ProgramArguments keyにプログラム名と引数の並びをarrayとして定義しています。
-Vオプションはverboseオプションで詳細なログを出力します。
-sオプションでスリープする時に実行されるプログラムを指定しています。
-wオプションでウェイクアップした時に実行されるプログラムを指定しています。
どちらもシェルスクリプトにしています。

次に、.sleepと.wakeupの内容を説明します。
.sleepは #!/bin/sh だけの行で実質的に空ファイルです。
.wakeupは、Synergyを再起動するシェルスクリプト(restart_synergy.sh)を記述しています。

#!/bin/sh
$HOME/bin/restart_synergy.sh

restart_synergy.shの中身は次のようになっています。


#!/bin/sh

PLIST=$HOME/Library/LaunchAgents/org.synergy-foss.org.synergys.plist

if launchctl list | grep -q synergys ; then
    #echo unloading `basename $PLIST` ... 1>&2
    launchctl unload $PLIST
    sleep 1
fi

#echo loading `basename $PLIST` ... 1>&2
launchctl load $PLIST


launchctl listでsynergysが実行されているかどうかを確認し、実行されている場合は一旦停止してからsynergysを再起動します。もともと実行されていなければすぐsynersysを起動します。
また、これらのスリープ、ウェイクアップ用スクリプトファイルに実行用パーミッションを付けておきます。

$ chmod a+x .sleep .wakeup

最後に、launchctlコマンドで起動します。

$ launchctl load ~/Library/LaunchAgents/org.macports.sleepwatcher-localuser.plist

Macをスリープ、解除してWindows側の画面にマウスを持って行ってマウスの速度が通常通りになっていれば成功です。

0 件のコメント:

コメントを投稿