Windows10でMIDIファイルを再生 その7 (2022/08/22) [Windows]
「Windows10でMIDIファイルを再生 その6」で紹介した、Windows10でTimidity++を使う方法を紹介していますが、改めて確認できたので再度記載します。(自分がWindows10を再インストールしたので)
1)Timidity++をセットアップする
2)Timidiy++を通常起動(timw32g)させ、サウンドフォントで音を鳴ることを確認する
3)loopMIDIをインストールしてloopMIDI portを1つ作成する
4)CoolSoft MIDIMapperをインストールして、デフォルトのMIDI出力先をloopMIDI portにする
5)twsyng(Timidity++付属)を起動させ、以下の通りloopMIDIデバイスで入力を待ち受ける(自動で開始するにチェック) ※1
※1)音が鳴る設定ファイルは2でセットアップしたものを流用すると良いです
これが最低準備要件のようです。
1)Timidity++をセットアップする
2)Timidiy++を通常起動(timw32g)させ、サウンドフォントで音を鳴ることを確認する
3)loopMIDIをインストールしてloopMIDI portを1つ作成する
4)CoolSoft MIDIMapperをインストールして、デフォルトのMIDI出力先をloopMIDI portにする
5)twsyng(Timidity++付属)を起動させ、以下の通りloopMIDIデバイスで入力を待ち受ける(自動で開始するにチェック) ※1
※1)音が鳴る設定ファイルは2でセットアップしたものを流用すると良いです
これが最低準備要件のようです。
タグ:Timidity++
Windows10を再インストールする その3(2022/08/14) [Windows]
UEFIのファン回転数制御ですが、温度と回転数を制御するためのもので、「ターボ」にしても最大回転数は変わらないようですね。これは「標準」のプロファイルですが、「ターボ」だと温度に関わらず100%を維持してくれるようです。
でも効果は覿面で、50~60度の比較的低温でも回転数が落ちずに回転数100%を維持してくれるため、CPU温度が60度~75度ぐらいを維持してくるようになりました。
半導体は温度が低い方が長持ちするでしょうから、些細なところではありますが、温度上昇が抑えられるのはうれしいことです。
あと、Windows10を再インストールした結果、BIOS+MBR構成が、UEFI+GPT構成に 変わったようで、ハードウェア構成は何も変えていないのですが、Windows11インストール要件を満たすようになりました。
でも効果は覿面で、50~60度の比較的低温でも回転数が落ちずに回転数100%を維持してくれるため、CPU温度が60度~75度ぐらいを維持してくるようになりました。
半導体は温度が低い方が長持ちするでしょうから、些細なところではありますが、温度上昇が抑えられるのはうれしいことです。
あと、Windows10を再インストールした結果、BIOS+MBR構成が、UEFI+GPT構成に 変わったようで、ハードウェア構成は何も変えていないのですが、Windows11インストール要件を満たすようになりました。
タグ:Windows
Windows10を再インストールする その2(2022/08/12) [Windows]
旧環境にインストールしていたソフトウェアは、一覧のスクリーンショットを撮っておくか、テキストとしてリストアップしておくと再インストールが楽です。
Windows10のインストーラーは公式のMedia Creation Toolで簡単に作ることができます。DVDを焼いても良いですし、USBフラッシュに書き込んでUSBブートさせても良いです。私は後者を選びました。
事前にドライバやアーカイバ7-Zipを用意しておいたおかげで、再インストール自体はサクサクで、あっという間に初期環境ができあがります。
最近はWebブラウザのブックマークもクラウドに退避させているものが自動同期されるので、リカバリがすごく楽ですね。
さてさて、クリーンインストールしたWindows10ですが、CPUクロック周波数が高止まりする現象は解消されました。CPUクロック3.8GHz付近でうろうろしていたものが、2.6GHz付近までクロックが落ちるようになりました。(電源系のプロファイルが腐ってたのでしょうか)
ちょっと重いゲームを起動させて試運転させてみたところ、3.8GHz〜4GHzをうろうろしており、これは仕方ないでしょう。…と思っていたら、CPUの温度が90℃近くなり、ちょっとやばい状況に。今までCPUの状態を監視しながらゲームしたことはありませんでしたから、こんなに熱を持っていたのかとびっくりです。
Windows10設定の電源プロファイルで、CPUの冷却はアクティブ(積極)となっていてこの状態ですから、このまま使っていては改善しないでしょう。ソケットAM4の強力なCPUクーラーも市販されていますが、4000〜5000円とそれなりに高額ですから、UEFI(BIOS)設定でCPU用のファンの冷却方針を、「標準」から「ターボ」に切り替えて様子見です。もとがショボいのか、騒音はほんとんどありません(笑)
一点、待ってもスクリーンセーバが起動 or ディスプレイの電源OFFが機能しない点は相変わらずで、これはUSBジョイパッドが悪さをしていました。外せば無事、スクリーンセーバーが起動するようになりました。
Windows10のインストーラーは公式のMedia Creation Toolで簡単に作ることができます。DVDを焼いても良いですし、USBフラッシュに書き込んでUSBブートさせても良いです。私は後者を選びました。
事前にドライバやアーカイバ7-Zipを用意しておいたおかげで、再インストール自体はサクサクで、あっという間に初期環境ができあがります。
最近はWebブラウザのブックマークもクラウドに退避させているものが自動同期されるので、リカバリがすごく楽ですね。
さてさて、クリーンインストールしたWindows10ですが、CPUクロック周波数が高止まりする現象は解消されました。CPUクロック3.8GHz付近でうろうろしていたものが、2.6GHz付近までクロックが落ちるようになりました。(電源系のプロファイルが腐ってたのでしょうか)
ちょっと重いゲームを起動させて試運転させてみたところ、3.8GHz〜4GHzをうろうろしており、これは仕方ないでしょう。…と思っていたら、CPUの温度が90℃近くなり、ちょっとやばい状況に。今までCPUの状態を監視しながらゲームしたことはありませんでしたから、こんなに熱を持っていたのかとびっくりです。
Windows10設定の電源プロファイルで、CPUの冷却はアクティブ(積極)となっていてこの状態ですから、このまま使っていては改善しないでしょう。ソケットAM4の強力なCPUクーラーも市販されていますが、4000〜5000円とそれなりに高額ですから、UEFI(BIOS)設定でCPU用のファンの冷却方針を、「標準」から「ターボ」に切り替えて様子見です。もとがショボいのか、騒音はほんとんどありません(笑)
一点、待ってもスクリーンセーバが起動 or ディスプレイの電源OFFが機能しない点は相変わらずで、これはUSBジョイパッドが悪さをしていました。外せば無事、スクリーンセーバーが起動するようになりました。
タグ:Windows
Windows10を再インストールする その1(2022/08/11) [Windows]
今のWindows10をインストールしてから約3年、だいぶ腐ってきてるんですよね。今分かってる不具合として、
・プロセスが張り付いて、たまに電源シャットダウンに失敗する
・エコモード設定なのに、CPUクロック周波数がブースト状態で高止まりする
・待ってもスクリーンセーバーが発動しない
・待ってもディスプレイの電源OFFが発動しない
などが挙げられます。
スクリーンセーバーが発動しないのもそうですが、CPUクロック周波数が高止まり(常時ブースト)するのもいかがなものかと思います。まあ、こういうときは思い切ってクリーン再インストールするに限りますね。
うちの環境はCドライブ(SSD)がシステム領域で、データ関連はDドライブ(HD)に分けているので、基本的にDドライブにデータを退避させて、Cドライブをフォーマットして再インストールすれば、比較的すぐにリカバリできます。
再インストールするときは以下を心がけると良いでしょう。
・ドライバ関連は最新のものを収集し、USBフラッシュにいれておく
・アプリの再インストールに必要なインストーラも同上(特にzip圧縮を展開するアーカイバなど)
・Google IDとパスワードなど、インストール初期に必要となる認証情報もメモっておく
といったことを準備しておけば、比較的スムーズに再インストールを行うことができます。
私の今の環境も、ほぼ半日で以前の環境とほぼ同等に復旧できています。
・プロセスが張り付いて、たまに電源シャットダウンに失敗する
・エコモード設定なのに、CPUクロック周波数がブースト状態で高止まりする
・待ってもスクリーンセーバーが発動しない
・待ってもディスプレイの電源OFFが発動しない
などが挙げられます。
スクリーンセーバーが発動しないのもそうですが、CPUクロック周波数が高止まり(常時ブースト)するのもいかがなものかと思います。まあ、こういうときは思い切ってクリーン再インストールするに限りますね。
うちの環境はCドライブ(SSD)がシステム領域で、データ関連はDドライブ(HD)に分けているので、基本的にDドライブにデータを退避させて、Cドライブをフォーマットして再インストールすれば、比較的すぐにリカバリできます。
再インストールするときは以下を心がけると良いでしょう。
・ドライバ関連は最新のものを収集し、USBフラッシュにいれておく
・アプリの再インストールに必要なインストーラも同上(特にzip圧縮を展開するアーカイバなど)
・Google IDとパスワードなど、インストール初期に必要となる認証情報もメモっておく
といったことを準備しておけば、比較的スムーズに再インストールを行うことができます。
私の今の環境も、ほぼ半日で以前の環境とほぼ同等に復旧できています。
タグ:Windows
有料VPNを試してみる その3(2021/12/3) [Windows]
■Windows編
Windowsは導入が簡単です。アプリをインストール後にアカウント情報を入力し、接続ボタンを押すだけ。以下の「確認くん」で通信の送信元IPアドレスが分かるので、これが変わっていたら成功です。
https://www.ugtop.com/spill.shtml
WindowsとしてはNordLynxというトンネルインタフェースが新たに追加されます。VPN接続中は、クラスAのプライベートIPアドレス(IPv4)が割り当てられるようです。
ただ、VPNサービス(Windowsソフトウェア?)としてはIPv4接続限定らしく、世の中でIPv6でしか提供されていないコンテンツは、おそらく接続不能になると思われます。
基本的に国などの接続先を選んで接続ボタンを押すだけです。
スプリットトンネルの設定があり、特定のアプリだけVPNを有効、もしくはその逆ができます。ただWebブラウザのみを対象とするのであれば、ChromeとFirefoxに対応している拡張機能(アドオン)を使った方が良いでしょう。
NordLynxのトンネルインタフェースをWireSharkでキャプチャすることもできました。
Windowsは導入が簡単です。アプリをインストール後にアカウント情報を入力し、接続ボタンを押すだけ。以下の「確認くん」で通信の送信元IPアドレスが分かるので、これが変わっていたら成功です。
https://www.ugtop.com/spill.shtml
WindowsとしてはNordLynxというトンネルインタフェースが新たに追加されます。VPN接続中は、クラスAのプライベートIPアドレス(IPv4)が割り当てられるようです。
ただ、VPNサービス(Windowsソフトウェア?)としてはIPv4接続限定らしく、世の中でIPv6でしか提供されていないコンテンツは、おそらく接続不能になると思われます。
基本的に国などの接続先を選んで接続ボタンを押すだけです。
スプリットトンネルの設定があり、特定のアプリだけVPNを有効、もしくはその逆ができます。ただWebブラウザのみを対象とするのであれば、ChromeとFirefoxに対応している拡張機能(アドオン)を使った方が良いでしょう。
NordLynxのトンネルインタフェースをWireSharkでキャプチャすることもできました。
MP3エンコードLameオプション(2021/07/28) [Windows]
先日、ブックオフで中古CDを買いました。そのまま聞くのは邪魔なので、MusicBeeでMP3ライブラリ化しました。CD取り込みはMP3やAAC、FLACなどを指定できるのですが、エンコーダのexeや具体的なエンコードオプションまでカスタマイズできるようで、なかなか便利なものです。
さて古いLame(~Lame3.99.5)なら「-b 128 -B 256 -v -V 4 -q 2 --nspsytune -m j -p --lowpass -1」なんてオプションを指定してたのですが、素人の凝ったチューニングではむしろ音質を下げてしまうとのことで、最近のLame(Lame3.100~)では「-V 2 -q 2 -m j -p」といった感じでシンプルに指定するのが良いようです。
※聞こえない音にビットレートを割り振るのではなく、聞こえる音にビットレートを割り当てて厚みを増した方が良い
で、買った中古CDをエンコードしてみたのですが、どの曲もおおよそ平均180Kbpsぐらいで落ち着いている感じです。聞き分けられる耳もなく不満もないのですが、-pオプション(エラーチェック)を付けているのと、曲がクラシックなので気分的に平均224Kbpsぐらいにしたいものですね。
ちょっとオプションをいじって「-V 0 -q 1 -m j -p」てな感じにしてみました。これで平均240Kbpsぐらいになり精神衛生的に満足です。まあ、エンコード結果の違い、音の違いは全く分かりませんが。
さて古いLame(~Lame3.99.5)なら「-b 128 -B 256 -v -V 4 -q 2 --nspsytune -m j -p --lowpass -1」なんてオプションを指定してたのですが、素人の凝ったチューニングではむしろ音質を下げてしまうとのことで、最近のLame(Lame3.100~)では「-V 2 -q 2 -m j -p」といった感じでシンプルに指定するのが良いようです。
※聞こえない音にビットレートを割り振るのではなく、聞こえる音にビットレートを割り当てて厚みを増した方が良い
で、買った中古CDをエンコードしてみたのですが、どの曲もおおよそ平均180Kbpsぐらいで落ち着いている感じです。聞き分けられる耳もなく不満もないのですが、-pオプション(エラーチェック)を付けているのと、曲がクラシックなので気分的に平均224Kbpsぐらいにしたいものですね。
ちょっとオプションをいじって「-V 0 -q 1 -m j -p」てな感じにしてみました。これで平均240Kbpsぐらいになり精神衛生的に満足です。まあ、エンコード結果の違い、音の違いは全く分かりませんが。
Windows10の時刻がずれる(NTP同期)(2021/07/03) [Windows]
Windows10の時刻がずれてしまいます。「時刻を同期する」設定の「今すぐ同期」ボタンを押せば補正されるのですが、7月3日現在、最後に同期したのは5月4日となっており、定期的に同期してくれないのか、非常に長いスパンで同期されるようであまり意味をなしていません。
昔は桜時計のようなフリーソフトもありましたが、さすがに今となっては骨董品レベルの古いソフトウェアになりますし、Windows10にもなればOSとしてのちゃんとした機能があることでしょう。
で、調べたら出てきたのが以下のページ。
https://kfujieda.hatenablog.com/entry/2020/03/14/214544
ここを見る限り、Windows10にはNTPクライアントが実装されているようですね。書いてある内容も、設定をよく理解している人が書いている模様。とりあえず書かれているように、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parametersを更新
を、やっていきます。NTPサーバとしてntp.nict.jpが書かれていましたが、よく考えればうちはCISCOルータがいるので宛先をCISCOルータに書き換えます。それ以外は変更せず、前述の設定のみを行いました。
設定変更後はコンフィグを反映する必要があるようで、MicrosoftのWebページにあるように以下のコマンドを発行したらエラーが出てしまいました。
これはWindowsのサービス「Windows Time」がサービスが起動していないことが原因らしく、自動起動設定を行います。
これで動くようになったと思われ、時刻同期が改善すると良いですね。
昔は桜時計のようなフリーソフトもありましたが、さすがに今となっては骨董品レベルの古いソフトウェアになりますし、Windows10にもなればOSとしてのちゃんとした機能があることでしょう。
で、調べたら出てきたのが以下のページ。
https://kfujieda.hatenablog.com/entry/2020/03/14/214544
ここを見る限り、Windows10にはNTPクライアントが実装されているようですね。書いてある内容も、設定をよく理解している人が書いている模様。とりあえず書かれているように、
C:\WINDOWS\system32>sc triggerinfo w32time start/networkon stop/networkoff [SC] ChangeServiceConfig2 SUCCESS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parametersを更新
を、やっていきます。NTPサーバとしてntp.nict.jpが書かれていましたが、よく考えればうちはCISCOルータがいるので宛先をCISCOルータに書き換えます。それ以外は変更せず、前述の設定のみを行いました。
設定変更後はコンフィグを反映する必要があるようで、MicrosoftのWebページにあるように以下のコマンドを発行したらエラーが出てしまいました。
C:\WINDOWS\system32>w32tm /config /update 次のエラーが発生しました。 そのサービスを開始できませんでした。 (0x80070426)
これはWindowsのサービス「Windows Time」がサービスが起動していないことが原因らしく、自動起動設定を行います。
C:\WINDOWS\system32>net start "windows time" Windows Time サービスを開始します. Windows Time サービスは正常に開始されました。
これで動くようになったと思われ、時刻同期が改善すると良いですね。
C:\WINDOWS\system32>w32tm /query /status 閏インジケーター: 0 (警告なし) 階層: 5 (二次参照 - (S)NTP で同期) 精度: -23 (ティックごとに 119.209ns) ルート遅延: 0.0257411s ルート分散: 0.1107079s 参照 ID: 0xFFFFFFFF (ソース IP: 192.168.0.254) 最終正常同期時刻: 2021/07/03 14:04:40 ソース: 192.168.0.254,0x8 ポーリング間隔: 12 (4096s)
TeraTermのマクロにおけるリンクと状態制御 その6(2021/02/11) [Windows]
ここまでいろいろ書くとマクロは難しそうなものと思うかもしれませんが、実際のところそんなことはないです。きちんと制御することは確かに大事ですが、まずは何より使うこと、もしくは使おうと努力することが大事かと思います。目的は「楽をすること」ですから。
まあ、私もマクロを暴走させつつpause命令で無理矢理制御するところから出発しました。pauseで制御するとどうしてもギクシャクした動きになってしまうのですが、pauseのないマクロは本当に流れるように動きます。それこそ60FPSのヌルヌル感のような気持ち良さがあります。
個人的に汎用ログ取得マクロを作成してメンテナンスしているので、いずれどこかで公開しても良いかなとは思っています。
マクロの動作精度を高めるには、プロンプトのwait部分をしっかり作り込む必要があります。私のお薦めはwaitregexの使用を前提に、プロンプト文字列として待つべき「正規表現」をマクロの手動パラメータで与えてしまうことです。
例えば、期待されるプロンプトが「Gyoumu001>」であれば、
waitregex '^Gyoumu\d+\>'
で精度良くマッチさせることができます。マクロの頭の方で
varPROMPT = '^Gyoumu\d+\>'
と書いておき、waitregex varPROMPTといった形で呼び出します。
正規表現の便利なところはあいまいさを許容するところで、Gyoumu1、Gyoumu002なんてホスト名もこの表現でカバーしてくれます。
マクロのconnect命令でsshやtelnet接続させることができますが、そこまで実装して完璧なマクロに仕上げる必要も無く、最初の接続は手動で行い、きちんと接続できた後に
と書き並べた.ttlマクロを手動で読み込ませるだけでも十分な機能を果たしてくれます。多少の汎用性もありますし、そんなに難しくないですよね。
まあ、私もマクロを暴走させつつpause命令で無理矢理制御するところから出発しました。pauseで制御するとどうしてもギクシャクした動きになってしまうのですが、pauseのないマクロは本当に流れるように動きます。それこそ60FPSのヌルヌル感のような気持ち良さがあります。
個人的に汎用ログ取得マクロを作成してメンテナンスしているので、いずれどこかで公開しても良いかなとは思っています。
マクロの動作精度を高めるには、プロンプトのwait部分をしっかり作り込む必要があります。私のお薦めはwaitregexの使用を前提に、プロンプト文字列として待つべき「正規表現」をマクロの手動パラメータで与えてしまうことです。
例えば、期待されるプロンプトが「Gyoumu001>」であれば、
waitregex '^Gyoumu\d+\>'
で精度良くマッチさせることができます。マクロの頭の方で
varPROMPT = '^Gyoumu\d+\>'
と書いておき、waitregex varPROMPTといった形で呼び出します。
正規表現の便利なところはあいまいさを許容するところで、Gyoumu1、Gyoumu002なんてホスト名もこの表現でカバーしてくれます。
マクロのconnect命令でsshやtelnet接続させることができますが、そこまで実装して完璧なマクロに仕上げる必要も無く、最初の接続は手動で行い、きちんと接続できた後に
varPROMPT = '^Gyoumu\d+\>' sendln '' waitregex varPROMPT sendln 'コマンド1' waitregex varPROMPT sendln 'コマンド2' waitregex varPROMPT sendln 'コマンド3'
と書き並べた.ttlマクロを手動で読み込ませるだけでも十分な機能を果たしてくれます。多少の汎用性もありますし、そんなに難しくないですよね。
タグ:TeraTerm
TeraTermのマクロにおけるリンクと状態制御 その5(2021/02/06) [Windows]
基本的にTeraTermのマクロは「信頼性」がないことを前提に作り込んだ方がうまくいくと思います。プロトコルで言えばUDPの世界です。これはTeraTermマクロ自身に欠陥があるというわけではなく、単に制御の難しさを物語っているだけかと思います。
接続先のシステムは、サーバであったりネットワーク機器であったり、挙動は千差万別です。返す文字列や応答時間も様々なのですから。
ここでその1の話題に戻りますが、あるホストにconnectしても、以下3つの状態が存在することを理解する必要があり、誤動作の原因となりえる事項についてはきちんとチェック・制御を行うべきです。
1)ホストへのtelnet/ssh接続状態
2)TeraTermマクロのリンク状態
3)ホストの入力受付状態
簡単に書くと、新規接続時を行った後のマクロ処理中のステータス(1、2、3の状態)は以下のパターンがあります。
×××
○××
○○×
○○○
例えば2の状態を確実にするには、以下のようなコードを挿入すると良いです。
これは切断する際にも有効で、特に様々なネットワーク機器に連続してログイン・ログアウトするようなケースだと必須のコードかと思われます。exit等でログアウト(切断)処理を行っても反映に時間が掛かるため、完全に接続が切れていない状態で次のホストへのconnect処理を行おうとし、失敗してしまうためです。
3の状態を確実にするのはもっと大変です。まあ単純に入力可能状態を検知するだけなら、エンター(空行)を無数に入力して、プロンプト文字の応答が返ってきていることを確認すれば良いでしょう。
ただ、たった今返ってきたプロンプト文字列が、その直前に入力したエンター(空行)と紐付いていることを確実にすることが難しいのです。その典型的なダメ症状が、その2で紹介した以下の例です。
単純な改行の連続のはずなのに、空行ができてしまう
n回のエンター(空行)入力と、それに対応するn回のプロンプト表示を待てば簡単ではないかと思うかもしれませんが、接続直後の状態は不安定で、一切の入力を受け付けない入力不可状態の時間が存在します。つまり、n回のエンター(空行)入力に対して、n回未満のプロンプト表示しか返ってこないケースがあるということです。
結局それの不完全解は、pause命令で一定時間待つことです。一般には3~5秒程度待っておけばさすがに入力可能になっていることでしょう。だから世の中のサンプルコードにはpauseでウェイト処理を入れているものが多いです。
完全解としては推奨しませんが、きちんと実装するだけの工数を掛けられない人や、とにかく制御不能になって困っている人には簡易解としてはお薦めです。
接続先のシステムは、サーバであったりネットワーク機器であったり、挙動は千差万別です。返す文字列や応答時間も様々なのですから。
ここでその1の話題に戻りますが、あるホストにconnectしても、以下3つの状態が存在することを理解する必要があり、誤動作の原因となりえる事項についてはきちんとチェック・制御を行うべきです。
1)ホストへのtelnet/ssh接続状態
2)TeraTermマクロのリンク状態
3)ホストの入力受付状態
簡単に書くと、新規接続時を行った後のマクロ処理中のステータス(1、2、3の状態)は以下のパターンがあります。
×××
○××
○○×
○○○
例えば2の状態を確実にするには、以下のようなコードを挿入すると良いです。
result=0 for i 1 200 testlink if result=2 then break endif mpause 10 next
これは切断する際にも有効で、特に様々なネットワーク機器に連続してログイン・ログアウトするようなケースだと必須のコードかと思われます。exit等でログアウト(切断)処理を行っても反映に時間が掛かるため、完全に接続が切れていない状態で次のホストへのconnect処理を行おうとし、失敗してしまうためです。
result=2 for i 1 200 testlink if result=0 then break endif mpause 10 next
3の状態を確実にするのはもっと大変です。まあ単純に入力可能状態を検知するだけなら、エンター(空行)を無数に入力して、プロンプト文字の応答が返ってきていることを確認すれば良いでしょう。
ただ、たった今返ってきたプロンプト文字列が、その直前に入力したエンター(空行)と紐付いていることを確実にすることが難しいのです。その典型的なダメ症状が、その2で紹介した以下の例です。
単純な改行の連続のはずなのに、空行ができてしまう
Router# Router# Router# Router# Router# Router# Router#
n回のエンター(空行)入力と、それに対応するn回のプロンプト表示を待てば簡単ではないかと思うかもしれませんが、接続直後の状態は不安定で、一切の入力を受け付けない入力不可状態の時間が存在します。つまり、n回のエンター(空行)入力に対して、n回未満のプロンプト表示しか返ってこないケースがあるということです。
結局それの不完全解は、pause命令で一定時間待つことです。一般には3~5秒程度待っておけばさすがに入力可能になっていることでしょう。だから世の中のサンプルコードにはpauseでウェイト処理を入れているものが多いです。
完全解としては推奨しませんが、きちんと実装するだけの工数を掛けられない人や、とにかく制御不能になって困っている人には簡易解としてはお薦めです。
タグ:TeraTerm
TeraTermのマクロにおけるリンクと状態制御 その4(2021/02/04) [Windows]
その1で、sshはtelnetに比べ制御が難しいと書きましたが、本質的なところは変わりません。その3で紹介した失敗事例はどちらにも当てはまります。
CISCO機器は制御しやすい印象です。プロンプト文字列が途中で変わること(> → #)や、特権モードに昇格するenableの存在があることぐらいでしょうか。個人的にwait系命令は、正規表現の使えるwaitregex命令がお薦めです。
waitで待つ文字列は、「ホスト名」や「#」だけではその3で紹介したように暴走の原因となりますので、「ホスト名#」の組み合わせで待つのが良いと思います。
意外と難しいのがFreeBSDやLinuxを汎用的な方法で制御しようとする場合です。FreeBSDの場合、ログイン時に以下のようなバナーが表示され、ご丁寧にもプロンプト文字列にありがちな>を含んでくれています。
また、プロンプト文字列は個別カスタム可能ですし、シェルもcsh系とsh系でプロンプト文字列が異なります。
CISCO機器の様に「ホスト名」とプロンプト文字「>」の組み合わせで待ってしまうと、以下のように出力によって誤判定しそうな行が山のようにあり、これも暴走の原因になってしまいます。そのためFreeBSDやLinuxはプロンプト文字列を大いに工夫する必要があります。(あるいは汎用性をなくして固定値で実装するか)
CISCO機器は制御しやすい印象です。プロンプト文字列が途中で変わること(> → #)や、特権モードに昇格するenableの存在があることぐらいでしょうか。個人的にwait系命令は、正規表現の使えるwaitregex命令がお薦めです。
waitで待つ文字列は、「ホスト名」や「#」だけではその3で紹介したように暴走の原因となりますので、「ホスト名#」の組み合わせで待つのが良いと思います。
意外と難しいのがFreeBSDやLinuxを汎用的な方法で制御しようとする場合です。FreeBSDの場合、ログイン時に以下のようなバナーが表示され、ご丁寧にもプロンプト文字列にありがちな>を含んでくれています。
FreeBSD 12.2-RELEASE-p1 GENERIC Welcome to FreeBSD! Release Notes, Errata: https://www.FreeBSD.org/releases/ Security Advisories: https://www.FreeBSD.org/security/ FreeBSD Handbook: https://www.FreeBSD.org/handbook/ ... systat -vmstat Other values are icmp, icmp6, ifstat, iostat, ip, ip6, netstat, pigs, sctp, swap, tcp, or zarc. You can switch between displays using :<display> and exit back to your shell by typing :quit -- Benedict Reuschling <bcr@FreeBSD.org>
また、プロンプト文字列は個別カスタム可能ですし、シェルもcsh系とsh系でプロンプト文字列が異なります。
user1@MyFreeBSD:~ % root@MyFreeBSD:~ # [user1@MyFreeBSD ~]$ [root@MyFreeBSD ~]#
CISCO機器の様に「ホスト名」とプロンプト文字「>」の組み合わせで待ってしまうと、以下のように出力によって誤判定しそうな行が山のようにあり、これも暴走の原因になってしまいます。そのためFreeBSDやLinuxはプロンプト文字列を大いに工夫する必要があります。(あるいは汎用性をなくして固定値で実装するか)
root@MyFreeBSD:~ # cat /var/log/messages ... Jan 10 02:48:43 MyFreeBSD pkg[98962]: pkg upgraded: 1.15.10 -> 1.16.1 ... Jan 27 14:57:09 MyFreeBSD kernel: ---<<BOOT>>--- ... Jan 27 14:57:09 MyFreeBSD kernel: Features=0x870<PIC,HYPERCALL,VPINDEX,TMFREQ> ...
タグ:TeraTerm