遅れたついでに
気になる点というのは、リモートデスクトップ機能を使って、寝床から、第4世代iPad Airを使って、メインマシンである所のMac mini M2 Proを操作していた所、TiExtenderのメインメニューにある「スリープを禁止する」を実行すると、管理者用パスワード入力用ダイアログが表示されるタイミングで、リモートデスクトップの画面がフリーズしてしまった、という点だ。
Windowsでは、「UACダイアログ」というのがそんな感じで、これが表示されると、普通のリモートデスクトップソフトなんかだと、画面表示がフリーズしてしまって使い物にならなくなる。
なので、ユーザーに管理者権限のパスワードを要求するこの処理についても、そんな感じなのかなあ、と、最初は思った訳だ。
何故なら、Windows版のMirror-DTCでは、UACダイアログ下の画面キャプチャーと操作用に、特別なデスクトップキャプチャー処理と権限を駆使しているのに対して、今回開発しているリモートデスクトップ機能では、そんな努力はしていないからだ。
このため、Mac用のMirror-DTCサーバーを使って、Mirror-DTCクライアントからアクセスし、同じパスワード入力ダイアログが表示される様にしてみたのだが、Mirror-DTC経由のアクセスでは、何ら問題なく、画面表示は行われたし、キーボード入力も問題なかった。
と、言う事なので、作者的には、Mac用Mirror-DTCサーバーを開発した時には、何か特別な対策を行い、その内容を忘れてしまっているのか、と、思ったのだが、Mirror-DTCサーバーのコードを見てみても、何も特別な事はやっていなかった。
なので、上記の様な画面フリーズ現象が起きる理由について考えてみたのだが、その結果としては、多分、TiExtenderのメインスレッドがパスワード入力用のダイアログによってブロックされてしまっていて、メインスレッドでしか画面キャプチャーできないキャプチャー機能的には、それが原因で、新たな画面、つまり、パスワード入力用ダイアログが表示されている画面をキャプチャーできていない! と、考えられた。
このため、バージョンが異なるTiExtenderをもう一つ立ち上げて、リモートデスクトップ機能を実行していない、そちら側で上記のコマンドを実行してみたのだが、そうすると、画面フリーズは発生せず、普通にパスワード入力も行えた。
と、言う事で、この問題は、macOS環境用の機能は、何でもかんでも、TiExtederに詰め込んできたツケが回ってきている、と、言えるかもしれない。
なので、上記の機能を実行する処理、つまり、Apple Scriptの実行処理については、別プロセスを起動して、そちらでやらせる様にプログラムを改変しようか、と、思っている今日この頃だ。
ちなみに、同様に画面をキャプチャーしている画面収録と拡大鏡でも同様の現象が発生していて、Appleスクリプトを実行してパスワード入力用ダイアログが表示されると、それぞれのキャプチャーでも、そのダイアログは表示されなくなっていた。
まあ、これらについては、同時に、そんな機能は使うな! という事にすれば、話は済むかもしれないのだが、リモートデスクトップ機能の場合、寝床で操作していて、パスワードダイアログが表示される機能を、何となく実行してしまうと、にっちもさっちも行かなくなる! というのでは、大問題かもしれない訳だ。
実際には、フリーズしているのは画面キャプチャーだけで、キーボード入力なんかは実行できているので、画面上では見えていないダイアログに対して、強引にパスワードを入力して改行してしまえば、機能は実行できているのだが、普通に鑑みれば、こういう状況は発生しないに越した事はない訳だ。
なので、Apple Scriptの実行処理がTiExtenderのメインスレッドをブロックしてしまわない様に、Apple Scriptの実行処理を担うコマンドラインツールを作成し、TiExtenderは、そのツールを起動してプロセス間通信により、当該機能を実行させる事にした。
結構大袈裟な処理になるので、普通なら、この程度の問題を回避するためには、やらないのだが、TiExtender Ver1.4.4のβ版は、遅くとも、今週の火曜には公開するつもりだったのに、既に、水曜の夜も終わりそうな状況なので、公開は、今週末くらいにする事にして、ついでに、改変しておく事にした訳だ。
今のところ、まだ、一行も、プログラムは書いていないのだが、少し前に書いた様に、作者的には、リバーシ関連プログラムとしてEdaxBoardというモノも開発していて、このプログラムでは、Edaxというコマンドラインツール相当のプログラムを起動してプロセス間通信を使って制御している。
つまり、そのコードを使えば、Apple Scriptの実行プロセスも、それなりに簡単に実現できる! と、考えているので、やってみる事にしたのだが、あまり上手くいかない様なら、改変はとりやめて、上記してきた問題は、制限事項、という事にする筈だ。

