Bash
如何控制放置在房間周圍的多台 Windows 電腦上的螢幕?
我想在房間周圍設置只讀螢幕,在不同時間顯示不同的消息。一台筆記型電腦將執行一個 BASH 腳本來檢查時間,並決定將哪些消息發送到哪個顯示器以及何時發送。這可以是純文字(可能是控制台,但字型很大)或圖片,只要有可能就可以。一個非常基本的腳本可能看起來像這樣:
#!/bin/bash echo "Good morning!" > /dev/screen1 echo "Please stack the blocks as high as you can!" > /dev/screen2
我的工作場所有許多未使用的聯想 Yogas,因此我可以將鍵盤折回並在房間周圍安裝七到八個,只顯示螢幕。我認為工作場所不允許我從這些設備中刪除 Windows 10。
- 文字或圖片,都可以。
- Yogas 確實有 HDMI 埠。
- 房間裡的人不會與螢幕互動,他們只會顯示資訊。
問題是,我如何從執行 Linux 的筆記型電腦上的 BASH 腳本中獲取文本(或可選圖片),以在分散在房間各處的 Windows 螢幕上顯示這些不同的消息或圖片?
在您的 Linux 機器上設置一個簡單的 http 伺服器,其中包含許多靜態 html 頁面。將您的消息從 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!