それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Synergyを自動接続。

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.