Bash

如何控制放置在房間周圍的多台 Windows 電腦上的螢幕?

  • April 25, 2021

我想在房間周圍設置只讀螢幕,在不同時間顯示不同的消息。一台筆記型電腦將執行一個 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!

引用自:https://unix.stackexchange.com/questions/646261