φ(.. ) 備忘録
   
  

2021年9月23日木曜日

fvwm風Autohotkeyスクリプト更新!

自宅時間が増え、自宅パソコンをいじる機会が多くなったので、これを機にパソコンの作業環境を整える。

まずは、ウィンドウ操作関連のショートカットの整備する。以前にAutohotkeyのスクリプトを作成してから、かなりの期間がたっており、状況も変わっていると思うので、スクリプトを作りなおしてみた。

スクリプトの内容は以下。

;===================================================================
; アクティブウィンドウのあるモニタを情報を返却する。
;===================================================================
GetCurrentMonitor(x,y,w,h){
  SysGet, MonitorCount, MonitorCount
  Loop, %MonitorCount%
  {
    SysGet, MonitorWorkArea, MonitorWorkArea, %A_Index%
    if(x+w/2 >= MonitorWorkAreaLeft AND x+w/2 <= MonitorWorkAreaRight){
      if(y >= MonitorWorkAreaTop AND y <= MonitorWorkAreaBottom){
        ;モニタの左上とセンタの座標を求める
        if(MonitorWorkAreaLeft<MonitorWorkAreaRight){
          MonitorW:=MonitorWorkAreaRight-MonitorWorkAreaLeft
          CenterX:=MonitorWorkAreaLeft+(MonitorWorkAreaRight-MonitorWorkAreaLeft)/2
        }
        else{
          MonitorW:=Abs(MonitorWorkAreaLeft)-Abs(MonitorWorkAreaRight)
          CenterX:=MonitorWorkAreaLeft+(Abs(MonitorWorkAreaLeft)-Abs(MonitorWorkAreaRight))/2
        }
        if(MonitorWorkAreaTop<MonitorWorkAreaBottom){
          MonitorH:=MonitorWorkAreaBottom-MonitorWorkAreaTop
          CenterY:=MonitorWorkAreaTop+(MonitorWorkAreaBottom-MonitorWorkAreaTop)/2
        }
        else{
          MonitorH:=Abs(MonitorWorkAreaTop)-Abs(MonitorWorkAreaBottom)
          CenterY:=MonitorWorkAreaTop+(Abs(MonitorWorkAreaTop)-Abs(MonitorWorkAreaBottom))/2
        }
        Return % MonitorWorkAreaLeft . " " . MonitorWorkAreaTop . " " . MonitorW . " " . MonitorH . " " . CenterX . " " . CenterY . " " . A_Index
      }
    }
  }
}
;===================================================================
; fvwm風ウィンドウ制御(マルチモニタ対応)
;===================================================================
^+!i::
^+!k::
^+!j::
^+!Left::
^+!Right::
^+!UP::
^+!DOWN::
  WinGet,id,ID,A
  WinGetPos,x,y,w,h,A
  String := GetCurrentMonitor(x,y,w,h)  
  Array := StrSplit(String, A_Space)
  MonitorX := Array[1]
  MonitorY := Array[2]
  MonitorW := Array[3]
  MonitorH := Array[4]
  CenterX := Array[5]
  CenterY := Array[6]
  MonitorNum := Array[7]
  if(x%id%=""){ ; ウィンドウが操作管理対象外の場合
    x%id% := x
    y%id% := y
    w%id% := w
    h%id% := h
    m%id% := MonitorNum
    Switch A_ThisHotkey
    {
      Case "^+!i": ;縦拡大
        if(x%id%+w%id%/2 < CenterX){ ;左
          WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH
        }
        Else{                        ;右
          WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH
        }
      Case "^+!k": ;横拡大
        if(y%id%+h%id%/2 < CenterY){ ;上
          WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2
        }
        Else{                        ;下
          WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2
        }
      Case "^+!j": ;全画面
        WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH
      Case "^+!Left":
        WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH
      Case "^+!Right":
        WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH
      Case "^+!UP":
        WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2
      Case "^+!DOWN":
        WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2
    }
  }

  Else{ ;ウィンドウが操作管理対象の場合
    if(A_ThisHotkey = "^+!i" or A_ThisHotkey = "^+!k" or A_ThisHotkey = "^+!j"){
      if(MonitorNum != m%id%){ ; モニタ番号が変わった
        x%id% := x
        y%id% := y
        w%id% := w
        h%id% := h
        m%id% := MonitorNum
        Switch A_ThisHotkey
        {
          Case "^+!i": ;縦拡大
            if(x%id%+w%id%/2 < CenterX){ ;左
          WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH
        }
        Else{                        ;右
          WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH
            }
          Case "^+!k": ;横拡大
            if(y%id%+h%id%/2 < CenterY){ ;上
              WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2
            }
            Else{                        ;下
              WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2
            }
          Case "^+!j":                   ;全画面
            WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH
        }
      }
      Else{ ; モニタ番号が同じ
        ;元のポジションに戻してウィンドウを忘れる
        WinMove,ahk_id %id%,,x%id%,y%id%,w%id%,h%id%
        x%id%=
        y%id%=
        w%id%=
        y%id%=
        m%id%=
      }
    }
    Else{ ; 方向キーの場合
      Switch A_ThisHotkey
      {
        Case "^+!Left":
          WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH
        Case "^+!Right":
          WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH
        Case "^+!UP":
          WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2
        Case "^+!DOWN":
          WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2
      }
    }
  }
  return
;拡張デスクトップの切り替え
^Left::#^Left
^Right::#^Right
^Up::#^Left
^Down::#^Right

以前のスクリプトでは画面サイズをハードコーディングしていたが、自動取得するAPIを発見したため、それに変更してみた。
あと、ウィンドウの移動とサイズ変更方法をWindowsの「Winキー+矢印」っぽくしてみた。使用方法は以下。

Ctrl+Shift+Alt+iウィンドウ縦拡大
Ctrl+Shift+Alt+kウィンドウ横拡大
Ctrl+Shift+Alt+jウィンドウ全画面
Ctrl+Shift+Alt+←ウィンドウ左寄せ
Ctrl+Shift+Alt+→ウィンドウ右寄せ
Ctrl+Shift+Alt+↑ウィンドウ上寄せ
Ctrl+Shift+Alt+↓ウィンドウ下寄せ
Ctrl+←仮想デスクトップ切り替え左
Ctrl+→仮想デスクトップ切り替え右
Ctrl+↑仮想デスクトップ切り替え左
Ctrl+↓仮想デスクトップ切り替え右


拡大中のウィンドウ選択時に特定のショートカットを入力すると元のサイズと位置に戻る。
あと、拡張デスクトップの切り替えをCtrl+矢印でできようにホットキーを変更している。
マルチモニターには一応対応させてつもり。誤動作するかもしれません。ご注意を。スクリプトの文字コードはUTF-8にしてください。



2021年9月22日水曜日

既存UbuntuサーバをWindows10のWSL2に置換する!(其の四)

   其の四:wsl2にhubotをインストールする

いよいよ本格的な移行作業として、wsl2のUbuntu 20.04 LTSにhubotをインストールする。いろんなサイトを参考にインストールしてみたがうまくいかず、かなり試行錯誤を繰り返したが、ようやくIRCチャットルームにbotをログインさせるところまで来たので、その手順を紹介する。

まず、hubotに必要なパッケージをインストールする。

$ sudo apt-get install nodejs npm coffeescript libicu-dev
次に、hubotをgit clone後、任意でディレクトリ名を変更し、ディレクトリを移動する。
$ git clone https://github.com/jgable/hubot-irc-runnable
$ mv hubot-irc-runnable hubot
$ cd hubot
次に、npmインストール実行。
$ npm install
次に、hubot-scripts.jsonを一応バックアップして編集。hubot-scripts.jsonうち、使用しないスクリプトを削除する。
$ cp hubot-scripts.json hubot-scripts.json.org
$ vi hubot-scripts.json
今回は全部つかわないので、以下の内容に変更。
[]
次に起動スクリプト(runbot.sh)を編集。
$ vi runbot.sh
内容は以下。ニックネームとかJOINするチャンネルとかは適当に変えてください。尚、同一WSL2内のチャットサーバに接続する場合には、以下設定(localhost)で接続できた。redis brainは今回使わないので起動しているところをコメントアウト。
#!/usr/bin/env sh

# Set Environment Variables
export HUBOT_IRC_NICK=hubot
export HUBOT_IRC_SERVER=localhost
export HUBOT_IRC_ROOMS="#test01,#test02"

# Using SSL?
#export HUBOT_IRC_PORT=6697
#export HUBOT_IRC_USESSL=true
#export HUBOT_IRC_SERVER_FAKE_SSL=true

# Server password?
#export HUBOT_IRC_PASSWORD=password

# Don't let hubot flood the room.
export HUBOT_IRC_UNFLOOD=true

# Output environment variables
echo HUBOT_IRC_NICK=$HUBOT_IRC_NICK
echo HUBOT_IRC_SERVER=$HUBOT_IRC_SERVER
echo HUBOT_IRC_ROOMS=$HUBOT_IRC_ROOMS

#echo HUBOT_IRC_PORT=$HUBOT_IRC_PORT
#echo HUBOT_IRC_USESSL=$HUBOT_IRC_USESSL
#echo HUBOT_IRC_SERVER_FAKE_SSL=$HUBOT_IRC_SERVER_FAKE_SSL
#echo HUBOT_IRC_PASSWORD=$HUBOT_IRC_PASSWORD

# Start the redis brain
#echo ""
#echo "Starting Redis Server"
#/usr/local/bin/redis-server > /dev/null &

echo ""
echo "Starting bot"
./bin/hubot -a irc

実行権を付与。
  $ chmod 755 runbot.sh
スクリプトを起動。正常に接続できると以下の応答がコンソールに出力される。
hubot has joined #test01
hubot has joined #test02
以上でインストールと起動は完了。ただし、hubotの文字コードはUTF-8が前提となっているため、ISO-2022-JP(Shift-jis)が前提のサーバだと、文字化けする。次回はこの文字化けを解消する。

既存UbuntuサーバをWindows10のWSL2に置換する!(其の三)

  其の三:wsl2にIRCチャットサーバをインストールする

hubotのwsl2移行のために、テスト用のIRCチャットサーバをwsl2で立ち上げる。手順は非常に簡単。

まず、wsl2のUbuntuにngircdをインストールする。

$ sudo apt install ngircd

次に、portproxyの設定とUbuntuのngircdサービスを起動するため、以下のバッチを作成する。バッチでは、wsl側のUbuntuが使用しているIPアドレスをwslコマンドで取得し、変数に設定。それを使って、portproxyを設定後、root権限でngircdサービスを起動する。

@echo off
for /f "usebackq" %%t in (`wsl -d Ubuntu-20.04 exec hostname -I`) do set IP=%%t
netsh.exe interface portproxy delete v4tov4 listenport=6667
netsh.exe interface portproxy add v4tov4 listenport=6667 connectaddress=%IP%
wsl -d Ubuntu-20.04 -u root service ngircd start

上記バッチをC:\Users\ユーザ名\tools\wsl\wsl2_ngircd_start.batとかに保存し、管理者権限で実行する。

これで、limechatとかでサーバをlocalhost:6667でつなげば、チャットが使用できる。

外部からのアクセスを許可する場合には、Windows Defender ファイアウォールの「受信の規則」でTCPポート6667番を許可に設定する必要があります。ご注意を!

 

2021年9月21日火曜日

既存UbuntuサーバをWindows10のWSL2に置換する!(其の二)

 其の二:wsl2にCygwinからsshログインする

まず、wsl2のUbuntuにopensshをインストールする。

$ sudo apt install openssh-server

次に、以下コマンドで鍵を作成する。

$ sudo ssh-keygen -A

次に、/etc/ssh/sshd_configのPasswordAuthenticationをyesに変更する。これをやらないと『Permission denied(publickey)』で怒られる。

PasswordAuthentication yes

次に、portproxyの設定とUbuntuのsshdサービスを起動するため、以下のバッチを作成する。バッチでは、wsl側のUbuntuが使用しているIPアドレスをwslコマンドで取得し、変数に設定。それを使って、portproxyを設定後、root権限でsshサービスを起動する。

@echo off
for /f "usebackq" %%t in (`wsl -d Ubuntu-20.04 exec hostname -I`) do set IP=%%t
netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=%IP%
wsl -d Ubuntu-20.04 -u root service ssh start

上記バッチをC:\Users\ユーザ名\tools\wsl\wsl2_ssh_start.batとかに保存し、管理者権限で実行する。

以上で、Cygwinからwslにsshログインできるようなる。
Windows起動時にこのバッチを起動するようタスクスケジューラに設定すれば、自動起動できると思う。
外部からのアクセスを許可する場合には、Windows Defender ファイアウォールの「受信の規則」でTCPポート22番を許可に設定する必要があります。ご注意を!






Windows 10 に Cygwinインストール

久しぶりにWindows 10にセットアップしたCygwinをminttyで開いたら、不要なターミナル画面が2画面くらいでてきてビックリ!原因調べるのめんどくさいので、再インストールすることにした。

まず、Cygwinには64bit版と32bit版の二種類のインストーラーが用意されている。普通に考えたら64bit版を選択したくなるが、過去の投稿で書いた通り、一部機能(perlのOLE)が64bit版で動かないことがあったため、32bit版を選択する。今は治っているかもしれないが・・・

インストール手順は以下。

  1. 古いCygwinのインストールフォルダを念のためリネーム。(C:\Cygwin -> C:\Cygwin.bak
  2. 新しいCygwinフォルダ(C:\Cygwin)を作成し、このインストーラをダウンロードしてCygwinフォルダに配置。
  3. インストーラを実行。Install from Internetを選択し次へクリック。
  4. Root Drectoryがインストールフォルダであることを確認し、次へクリック。
  5. 次へクリック
  6. Use System Proxy Settingsを選択して次へ
  7. 近そうなDownload Sites(日本ならjp)を選択し次へ
  8. パッケージを追加したい場合は、「New」欄のプルタブをクリックして、Skipとなっているところをインストールするバージョンを選択し、次へをクリック。私は、gcc,make,perl,tcsh,minttyを追加した。
  9. 完了クリック
  10. Cygwin Terminalを起動すると、各種デフォルト設定ファイルがhome配下に自動でコピーされる。このあと古いCygwinにある各種設定ファイル(.bashrcや.tcshrc)を新しいCygwinのhome配下にコピー。これで移行完了。動作が問題ないようなら古いCygwinは消してしまおう。
以上で、インストール完了。ちなみに、Windowsのユーザー環境変数に以下を追加するとCygwin Terminal起動時のShellを変更できる。
 変数名=「SHELL」 値=「シェルの在りか 例)/bin/tcsh」


既存UbuntuサーバをWindows10のWSL2に置換する!(其の一)

其の一:WSL2のUbuntu 20.04 LTSをインストール

会社で使っている既存Ubuntuサーバの老朽化が心配・・・。Ubuntuサーバと言っても若手の転勤で不要となったデスクトップPCにUbuntuをインストールしただけの激安サーバである。ただし、もう7年くらい不具合なく常時稼働(ビル停電以外は常時ON)している。優秀。FUJITSU最高。

このサーバでは全文検索ツールとIRCチャットのbot(hubot)が動作しているため、故障に備えて、別なPCにあらかじめ環境を構築していつでも移行できるように作業を進めたい。

移行先は、別PCにUbuntuを入れるもしくは、仮想化マシンにする等あるが、今回はWindows10のWSL2に構築してみる。 

まず、WSL2のインストール。

  1. Windows->設定->プログラムと機能->Windowsの機能の有効化または無効化で『Linux用Windowsサブシステム』と『仮想マシンプラットフォーム』をチェックし再起動。
  2. Linux カーネル更新プログラム パッケージをダウンロードし、インストールする。https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
  3. Windows PowerShellを起動し、『wsl --set-default-version 2』を実行し、WSL 2 を既定のバージョンとして設定する。
  4. MicroSoft Store からUbuntu 20.04 LTSをインストール。https://www.microsoft.com/store/apps/9n6svws3rx71
  5. スタートメニューからUbuntu 20.04 LTSを起動し、ユーザとパスワード設定。
  6. Windows PowerShellで『wsl -l -v』WSLの状態確認。STATEがRunning、VERSIONが2となっていればOK。
以上、これでWSL2のインストールは完了。詳しい手順は、https://docs.microsoft.com/ja-jp/windows/wsl/install-win10に書いてある。





2015年2月15日日曜日

かかとのひび割れ対策におすすめ

冬のこの時期かならずといっていいほど両足のかかとがひび割れを起こす。角質をちゃんと除去していないのが原因かと思い銭湯でヤスリを使ってガッツリとってみたこともあるが、つるつるにはなったもののそのあとすぐひび割れをおこしてしまった。
最近この悩みは以下のクリームで解消できた。

メンターム メディカルクリームG 145g
近江兄弟社 (2002-10-07)
売り上げランキング: 3,132

お風呂上りにかかと全体に塗り込むだけでひび割れが防止できるばかりか、分厚い角質もきれいにとれてくる。これは手放せません。おすすめです。