Synergyの起動が面倒だ。
Synergyは暗号化通信をしない。暗号化はSSHのポートフォワーディングでヤレってスタンスのようです。そこでSSHポートフォワーディングをPuttyでやるのですが。コレが面倒だ。
無線LANが切断されるたびに、Synergyとポートフォワーディングを起動する。これが何度も繰り返されると面倒だ。
そこでこれを自動化した。そして無線LANの接続イベントにAttachしてやった。これで特定のAPにつないだときだけ自動で起動するようになった。
動作の概要。
無線LANに接続⇒プログラム起動⇒Synergy再接続
無線LANに接続したタイミングでsynergy起動
IntelWirelessControlerで設定できた。アクセスポイント設定がある。接続時に指定プログラムを実行させる。アクセスポイント毎に別々のプログラムが指定可能。
Synergyの起動
SynergyはノートPCで動かすため、デスクトップに接続する。ただしIPの変更対応と通信の暗号化のためポートフォワーディングを採用してLocalhostの24800番をサーバーに転送する。
意外と便利だ
synergy_restart.js:
Synergyのプロセスをすべて終了して接続し直す。WMIとWSHの傑作。
/*** * Synergy開始 */ /** * synergyを開始するコマンド実行 */ function doCmd( command ){ var shell = WScript.CreateObject("WScript.Shell"); shell.Run( command, 0, false); return void(0); } /** * WMI をWSHから起動して引数に一致するなまえのプロセスを殺す。 * @argment program_name プログラム名(たいていは ***.exe) */ function TerminateProcess( program_name ){ var strComputer = "."; var name = "winmgmts:\\\\" + strComputer + "\\root\\CIMV2"; var oWmis = GetObject(name); var cols = oWmis.ExecQuery("SELECT * FROM Win32_Process WHERE Caption = '"+ program_name +"'") var list = new Enumerator(cols) for(;!list.atEnd(); list.moveNext()){ var proc = list.item(); //WScript.Echo( proc.Caption ); //WScript.Echo( "\t" + proc.ProcessId); //WScript.Echo( "\t" + proc.terminate() ); proc.terminate() } } /** * 既存のsynergycを終了する。 */ function killExistsSynergys(){ TerminateProcess( "synergyc.exe" ); } /** * 既存のポートフォワーディングを終了する。 */ function killExistsPortForwarding(){ TerminateProcess( "pfwd.exe" ); } function ConnectToSynergys(){ var host_name = "localhost"; var port = "24800"; var screen_name = "d420"; var synergyc_path = 'C:\\Program Files\\Synergy\\synergyc.exe' var synergy_cmd = '"'+synergyc_path + '"' + " --daemon --restart --name " + screen_name+" "+host_name+":"+port+' '; //WScript.Echo(synergy_cmd); return doCmd(synergy_cmd); } function StartPortFowarding(){ var fwd = '"C:\\Program Files\\PuTTY\\pfwd.exe"'; var ini = '"C:\\Program Files\\PuTTY\\pfwd.ini"'; var cmd = fwd + " " + ini; //WScript.Echo(cmd); return doCmd(cmd); } function main(){ killExistsPortForwarding(); killExistsSynergys(); StartPortFowarding(); ConnectToSynergys(); } main(); //自動的にSynergyを開始する。 // //できれば)SSHでサーバーにログインしてSynergyを再起動。 //SSH port forwadingを実行 //実行コマンド #> '"C:\Program Files\PuTTY\pfwd.exe" "C:\Program Files\PuTTY\pfwd.ini"'; // //Synergyを実行 // // //"C:\Program Files\Synergy\synergyc.exe" --daemon --restart --name d420 localhost:24800 // //host_name localhost //screen_name d420 //port 24800 //interface 192.168.4.55 (ここは動的に取得したい) //Usage: synergyc [--daemon|--no-daemon] [--debug <level>] [--display <display>] [--name <screen-name>] [--restart|--no-restart] <server-address> // // // //Start the synergy mouse/keyboard sharing server. // -d, --debug <level> filter out log messages with priorty below level. // level may be: FATAL, ERROR, WARNING, NOTE, INFO, // DEBUG, DEBUG1, DEBUG2. // --display <display> connect to the X server at <display> // -f, --no-daemon run the client in the foreground. //* --daemon run the client as a daemon. // -n, --name <screen-name> use screen-name instead the hostname to identify // ourself to the server. // -1, --no-restart do not try to restart the client if it fails for // some reason. //* --restart restart the client automatically if it fails. // -h, --help display this help and exit. // --version display version information and exit. //* marks defaults.