[FileMaker][Raspberry Pi] WebDirect のセッションタイムアウト制限を無理やり回避する

インタラクティブな操作ができるデジタルサイネージを実現したい。そういうときは、FileMaker Server を使って FileMaker Pro Advanced や FileMaker Go を常時表示しておくのも一つの手だ。情報表示や、クリック操作でスクリプトの実行なりで自由なことができる。

しかしそのためには、Mac や iOS が必要になる。デジタルサイネージ目的に Mac や iOS を用意するのは難しい。だから、安いタブレットや Raspberry Pi を使えるといい。

FileMaker Server には WebDirect という機能があるので、ブラウザで FileMaker データベースにアクセスできる。

デジタルサイネージ目的で WebDirect が使えたら最強なんだけど、問題は「セッションタイムアウト」だ。WebDirect はアイドル状態が続くとデータベースからサインアウトされてしまう。サインアウトする仕様は解除できないようになっているし、アイドル状態は最大 60 分にしか設定できない。

FileMaker クライアントのセッションタイムアウト
https://fmhelp.filemaker.com/help/17/fms/ja/index.html#page/FMS_Help/config-client-timeouts.html

セッションタイムアウトのせいで FileMaker WebDirect をデジタルサイネージとして使うことはできない。1時間で表示されなくなっちゃうから。

それをやや強引に回避する方法を思いついた。それは前回のエントリーで書いた Raspberry Pi の xautomation を使うのだ。

[Raspberry Pi] xautomation でマウス、キーボード操作を自動化する – with a Christian Wife
https://wacw.cf/2018/12/04/sumulate-mouse-and-keyboard-with-xautomation/

すなわち、あらかじめレイアウトを切り替えるスクリプトを作成しておき、それをボタンとして配置しておく。一定時間ごとにそこを自動クリックするようにすれば、セッションタイムアウトしないですむのだ。

具体的には以下のようにする。

(1)FileMaker Server Admin Console で WebDirect のセッションタイムアウトを最大の 60 分にしておく。

(2)FileMaker でレイアウト切り替えのスクリプトを作る(適当なレイアウトに行き、すぐに元のレイアウトに戻るスクリプト)

(3)データベース上の適当な位置にボタンを配置し、ボタンクリックで2のスクリプトが実行されるようにする。

(4)データベースを FileMaker Server にアップ。Raspberry Pi からデータベースに WebDirect でアクセスする。

(5)データベースのボタン位置にマウスカーソルを合わせ、xautomation でボタンの座標を取得。

(6)cron で以下のようにして 40 分ごとに (x,y)=(599, 88) (=5で取得した値)がクリックされるようにする( DISPLAY=:0 なしではうまく cron が動かなかったので頭に付けておいた)。

0,40 */2 * * * DISPLAY=:0 xte 'mousemove 599 88' && DISPLAY=:0 xte 'mouseclick 1'
20 1-23/2 * * * DISPLAY=:0 xte 'mousemove 599 88' && DISPLAY=:0 xte 'mouseclick 1'

(*/40 * * * * 〜 とすると、毎時0分に実行されてしまうので上記のように2行で記述する必要がある。なるべく少ない記述で、かつ 60 分以下だと 40 分ごとになる。)

実際に試してみたところ、セッションタイムアウトしなくなった。これで Raspberry Pi 上で FileMaker WebDirect を利用したデジタルサイネージを実現できた。

参考:
cron で奇数時毎に処理を実行する : あかぎメモ
https://blog.akagi.jp/archives/2287.html

crontab – How do set cron to run my script every 40mins/25mins? – Stack Overflow
https://stackoverflow.com/questions/8181949/how-do-set-cron-to-run-my-script-every-40mins-25mins