私は部屋の周りに異なる時間に異なるメッセージを表示する読み取り専用画面を設定したいと思います。ラップトップはBASHスクリプトを実行して時間を確認し、どのメッセージをどのモニタに送信するかを決定します。これはプレーンテキスト(おそらくコンソールですがフォントが大きい場合)、画像、またはどちらでも機能します。非常に基本的なスクリプトは次のとおりです。
#!/bin/bash
echo "Good morning!" > /dev/screen1
echo "Please stack the blocks as high as you can!" > /dev/screen2
私の職場には使われていないLenovo Yogaがたくさんあり、キーボードを折りたたんで画面だけをつけたまま部屋に7~8個を装着できます。職場では、これらのデバイスからWindows 10を削除することはできません。
- 文や絵は大丈夫です。
- YogasにはHDMIポートがあります。
- 部屋の人は画面と対話せずに情報だけを表示します。
問題は、Linuxを実行しているラップトップのBASHスクリプトからテキスト(またはオプションで画像)を取得し、部屋全体に散在しているWindows画面にこれらのさまざまなメッセージや画像を表示するにはどうすればよいですか?
答え1
多くの静的HTMLページを持つLinuxシステムに簡単なhttpサーバーを設定します。 Bashからこのページに直接メッセージを書いてください。 Windowsコンピュータのブラウザでこのページを開きます。新しいデータが入ると、一部のJavaScript魔法を使用してコンテンツを自動的に再ロードできます。
例:
Linuxマシンの場合:
静的httpサーバーを設定し、以下から提供するようにしてください/var/www/room/
。
mkdir /var/www/room/
cd /var/www/room/
python3 -m http.server
ページの作成/var/www/room/index.html
:
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="data">
<!-- here will be an autoreloaded data -->
</div>
<script>
const AUTORELOAD_TIMEOUT = 1000; // milliseconds
setInterval(async () => {
/*
Load data from an address after the hash-sign (#) and put it into div#data
E.g. if the browser location is:
http://somesite/some/path#some/file/name
then the function will load data from the page:
http://somesite/some/file/name
*/
const hash = document.location.hash
if (hash.length <= 1) {
return
}
const file = hash.slice(1)
const response = await fetch(file)
if (response.status === 200) {
document.getElementById("data").innerHTML = await response.text()
}
}, AUTORELOAD_TIMEOUT)
</script>
</body>
Windowsマシンの場合:
- ブラウザを開く
http://your-linux-machine-ip:your-linux-machine-port/index.html#screen1
Linuxマシンの場合:
- ファイルへの書き込み
screen1
:
echo "Hello, world!" > /var/www/room/screen1
Windowsシステムを確認してください。
- ページにテキストを表示する必要があります。
Hello, world!