เรียก Social Stream Ninja แบบไร้หน้าจอ

ให้แอปเดสก์ท็อปเต็มจับข้อมูลบนเซิร์ฟเวอร์ที่บ้านหรือ VPS ที่ใช้ Ubuntu หรือ Debian โดยไม่ต้องมีจอจริง

ข้ามไป การตั้งค่าครั้งแรก, HTTP API, MCP, Owncast และ Rocket.Chat, หรือ ตรวจการจับข้อมูล.

ได้ — ใช้ Linux AppImage ปกติ

ดาวน์โหลดแอป Linux ปกติและให้สิทธิ์เรียกทำงาน บน VPS ที่ไม่มีเดสก์ท็อป การเปิด AppImage อย่างเดียวไม่พอ ต้องใช้จอเสมือนและ --ssapp-headless-control แฟล็ก ขั้นตอนด้านล่างให้การจับแชตทำงานต่อหลังตัด SSH และหลังรีบูตเซิร์ฟเวอร์

โหมดไร้หน้าจอซ่อนหน้าต่าง Electron ของ SSApp แต่หน้าแหล่งยังเป็นหน้าต่างเบราว์เซอร์จริง Linux จึงต้องมีจอเสมือน เช่น Xvfb ไม่ใช่บริการแชตเบื้องหลังขนาดเล็กอย่างเดียว

โหมดไร้หน้าจอไม่สร้าง API ควบคุมสาธารณะ ตัวควบคุมบนคอมพิวเตอร์อื่นใช้เซสชัน Social Stream เดียวกันและช่องทาง WebRTC ปกติหรือ WebSocket ที่โฮสต์ไว้ เช่นเดียวกับขั้นตอนควบคุมระยะไกลอื่น

ก่อนเริ่ม

  • ใช้ Ubuntu 22.04+, Debian 12+ หรือ Linux ลักษณะใกล้เคียง
  • เผื่อหน่วยความจำอย่างน้อย 2 GB สำหรับระบบเล็ก และเพิ่มสำหรับหน้าต่างแหล่งหลายหน้าต่าง
  • เลือกโฟลเดอร์โปรไฟล์ถาวรสำหรับการตั้งค่า แหล่งข้อมูล เซสชัน และข้อมูลเบราว์เซอร์
  • เตรียมใช้เดสก์ท็อปหรือ VNC หนึ่งครั้งเพื่อเข้าสู่ระบบและตั้งค่าส่วนตัวอื่น

URL แหล่งสาธารณะที่ไม่ต้องเข้าสู่ระบบดูแลระยะไกลง่ายที่สุด OAuth, CAPTCHA, รหัสผ่าน คุกกี้ และการตั้งค่าบัญชียังต้องมีคนดำเนินการ

1. ติดตั้ง Xvfb และ AppImage

sudo apt-get update
sudo apt-get install -y xvfb x11-utils xauth curl
sudo mkdir -p /opt/socialstream
sudo mv ./YOUR_DOWNLOADED_FILE.AppImage /opt/socialstream/socialstreamninja.AppImage
sudo chmod 755 /opt/socialstream/socialstreamninja.AppImage

ดาวน์โหลด Linux AppImage ปัจจุบันจาก หน้าดาวน์โหลด Social Stream Ninja เลือกไฟล์ดาวน์โหลดให้ตรงสถาปัตยกรรมเซิร์ฟเวอร์ (uname -m), แล้วแทนที่ YOUR_DOWNLOADED_FILE.AppImage ด้านบนด้วยชื่อไฟล์ที่ตรงทุกตัว ไม่ต้องเช็กเอาต์ซอร์สหรือติดตั้ง Node แยก

2. เตรียมโปรไฟล์และเข้าสู่ระบบครั้งแรก

ใช้บัญชีและโฟลเดอร์ข้อมูลเดียวกันสำหรับตั้งค่าและบริการเบื้องหลัง สร้างบัญชีเฉพาะ:

id ssapp >/dev/null 2>&1 || sudo useradd --system --create-home --home-dir /var/lib/ssapp --shell /usr/sbin/nologin ssapp
sudo install -d -o ssapp -g ssapp -m 700 /var/lib/ssapp
sudo apt-get install -y x11vnc
sudo -u ssapp Xvfb :99 -screen 0 1920x1080x24 -nolisten tcp -extension GLX

เปิดเทอร์มินัลนั้นทิ้งไว้ ในเทอร์มินัล SSH ที่สอง เปิด SSApp แบบมองเห็นบนจอเสมือนนั้น:

sudo -u ssapp env DISPLAY=:99 SSAPP_USER_DATA_DIR=/var/lib/ssapp SSAPP_HEADLESS_CONTROL=0 \
  /opt/socialstream/socialstreamninja.AppImage --ozone-platform=x11 --no-hwa

ในเทอร์มินัล SSH ที่สาม เริ่ม VNC ชั่วคราวโดยจำกัดให้เข้าถึงจากเซิร์ฟเวอร์เองเท่านั้น:

sudo -u ssapp x11vnc -display :99 -localhost -rfbport 5900 -nopw -forever

บนคอมพิวเตอร์ของคุณ เปิด SSH tunnel:

ssh -N -L 5900:127.0.0.1:5900 you@your-server

เชื่อมโปรแกรมดู VNC ไปยัง localhost:5900 ตั้งรหัสเซสชัน Social Stream และรหัสผ่านถ้าต้องการ เพิ่มแหล่งข้อมูล และเข้าสู่ระบบให้ครบ เปิด เปิดอัตโนมัติ (Auto-activate) บนแหล่งที่ต้องการให้เริ่มเมื่อ SSApp เริ่ม คัดลอกลิงก์แผงด็อกแชตและโอเวอร์เลย์ Featured ไว้ใช้ภายหลัง

ออกจาก SSApp หลังตั้งค่า แล้วหยุด VNC, tunnel และ Xvfb ด้วย Ctrl+C ในแต่ละเทอร์มินัล อย่าเปิดตัวตั้งค่าและบริการพร้อมกันโดยใช้โปรไฟล์เดียวกัน VNC ที่ต่อกับอินสแตนซ์ไร้หน้าจออยู่แล้วมักเห็นจอว่างเพราะหน้าต่างถูกซ่อน

ใช้ SSAPP_USER_DATA_DIR ไม่ใช่ค่าของ Chromium --user-data-dir เข้าสู่ระบบให้เสร็จบน VPS คุกกี้เบราว์เซอร์ที่คัดลอกจากระบบปฏิบัติการอื่นอาจถอดรหัสไม่ได้

3. เริ่มแอปแบบไร้หน้าจอ

sudo -u ssapp env SSAPP_USER_DATA_DIR=/var/lib/ssapp xvfb-run -a -s "-screen 0 1920x1080x24 -nolisten tcp -extension GLX" \
  /opt/socialstream/socialstreamninja.AppImage \
  --ozone-platform=x11 --ssapp-headless-control --no-hwa

ส่วน --ssapp-headless-control แฟล็กซ่อนหน้าต่างแอป คำสั่งที่ทำงานในเทอร์มินัลนี้หยุดเมื่อคุณหยุด ใช้บริการ systemd ด้านล่างสำหรับปล่อยทำงานเอง แอปหลักยังต้องใช้ Xvfb; --ozone-platform=headless ไม่ใช่สิ่งทดแทนจอเสมือน

4. ควบคุมจากคอมพิวเตอร์อื่น

ใช้รหัสเซสชัน Social Stream และรหัสผ่านถ้ามีชุดเดียวกันบนแอปไร้หน้าจอและตัวควบคุมระยะไกล WebRTC เป็นช่องทางปกติ หากไม่เหมาะกับสภาพแวดล้อม ใช้โหมดเซิร์ฟเวอร์ WebSocket ที่ Social Stream โฮสต์ไว้

ส่วนควบคุมระยะไกลที่รองรับเพิ่ม เริ่ม หยุด เริ่มใหม่ ปิดเสียง และซ่อนแหล่งสาธารณะได้ แต่ไม่ทำขั้นตอนเข้าสู่ระบบ OAuth, CAPTCHA, คุกกี้ ข้อมูลรับรอง หรือการตั้งค่าบัญชีส่วนตัวอื่นจากระยะไกลให้เสร็จ

ดู เซสชัน รหัสผ่าน รีเลย์ และโหมดเซิร์ฟเวอร์ เมื่อตัวควบคุมระยะไกลเชื่อมต่อแต่ข้อความหรือคำสั่งไม่มาถึง

ให้ทำงานต่อเนื่องด้วย systemd

หยุดแอปที่ทำงานในเทอร์มินัลด้วย Ctrl+C ก่อน สร้าง /etc/systemd/system/ssapp.service พร้อม sudo nano /etc/systemd/system/ssapp.service แล้ววาง unit นี้:

[Unit]
Description=Social Stream Ninja (headless)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=ssapp
StateDirectory=ssapp
WorkingDirectory=/opt/socialstream
Environment=SSAPP_USER_DATA_DIR=/var/lib/ssapp
ExecStart=/usr/bin/xvfb-run -a -s "-screen 0 1920x1080x24 -nolisten tcp -extension GLX" /opt/socialstream/socialstreamninja.AppImage --ozone-platform=x11 --ssapp-headless-control --no-hwa
Restart=on-failure
RestartSec=10
KillSignal=SIGTERM
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now ssapp
journalctl -u ssapp -f

บริการใช้บัญชีและโปรไฟล์ที่สร้างในขั้นตอน 2 เริ่มเมื่อบูตและเริ่มใหม่หลังแอปล้มเหลว หากเปลี่ยนเส้นทางติดตั้ง ให้อัปเดต ExecStart ให้ตรงกัน

HTTP API เพิ่มเติมสำหรับสคริปต์บน VPS

โหมดไร้หน้าจอไม่เปิด API ควบคุม หากต้องการเปิดให้บริการของคุณ ให้เรียก sudo systemctl edit ssapp แล้วบันทึก override นี้:

[Service]
Environment=SSAPP_CONTROL_API=1
sudo systemctl daemon-reload
sudo systemctl restart ssapp
curl -sS http://127.0.0.1:17777/api/v1/capabilities
curl -sS http://127.0.0.1:17777/api/v1/status

สำหรับเปิดด้วยตนเอง เพิ่ม --ssapp-control-api ลงในคำสั่งแอปแทน เรียกคำสั่งต่อไปนี้ในเชลล์ SSH บน VPS API ตั้งใจไม่มีโทเค็นและผูกเฉพาะกับ 127.0.0.1; แยกจากเว็บเซิร์ฟเวอร์ Owncast หรือ Rocket.Chat ให้ใช้เฉพาะในเครื่อง

อ่าน ssappVersion, apiVersion, และแพลตฟอร์มที่รองรับใน capabilities ก่อน เช่น หากรองรับ Twitch ให้เพิ่มแหล่งข้อมูล (แทนที่ CHANNEL_NAME):

curl -sS http://127.0.0.1:17777/api/v1/command \
  -H 'Content-Type: application/json' \
  -d '{"action":"addSource","value":{"target":"twitch","username":"CHANNEL_NAME","autoActivate":true}}'

curl -sS http://127.0.0.1:17777/api/v1/command \
  -H 'Content-Type: application/json' \
  -d '{"action":"getSources","value":{}}' 

คัดลอกค่าคงที่ของแหล่งข้อมูล id จากรายการแหล่งที่คืนมาแล้วแทนที่ SOURCE_ID ด้านล่าง การเพิ่มแหล่งยังไม่เปิดใช้งาน; autoActivate ควบคุมการเปิดแอปครั้งถัดไป

curl -sS http://127.0.0.1:17777/api/v1/command \
  -H 'Content-Type: application/json' \
  -d '{"action":"startSource","value":{"sourceId":"SOURCE_ID"}}'

curl -sS http://127.0.0.1:17777/api/v1/command \
  -H 'Content-Type: application/json' \
  -d '{"action":"getSourceDiagnostics","value":{"sourceId":"SOURCE_ID"}}'

curl -sS http://127.0.0.1:17777/api/v1/command \
  -H 'Content-Type: application/json' \
  -d '{"action":"stopSource","value":{"sourceId":"SOURCE_ID"}}' 

ตรวจสอบ ok และ payload ในแต่ละคำตอบ ความล้มเหลวคืน error อ่านสถานะหลังเปลี่ยน หากคำขอหมดเวลา ตรวจสถานะก่อนลองซ้ำ หยุดแหล่งก่อนเปลี่ยนช่องเชื่อมต่อ คำสั่งโหลดใหม่ นำออก และปิดระบบต้องใช้ confirm: true.

curl -N http://127.0.0.1:17777/api/v1/events ติดตามฟีด Server-Sent Events จนกด Ctrl+C ดู คู่มือ API และ MCP สำหรับเอกสารอ้างอิงครบถ้วน สิ่งเหล่านี้ควบคุมแอป/แหล่งข้อมูล การกระทำโอเวอร์เลย์ เช่น แสดงแชตเด่น ใช้แผงด็อก Social Stream และ คำสั่ง Social Stream.

MCP เพิ่มเติมสำหรับไคลเอนต์ AI บน VPS

MCP ให้ไคลเอนต์ AI ที่รองรับเรียกส่วนควบคุม SSApp เป็นเครื่องมือได้ เปิด API ข้างต้นและให้บริการแอปหลักทำงาน ลงทะเบียนการตั้งค่านี้ในไคลเอนต์ที่ทำงาน บน VPS:

{
  "mcpServers": {
    "social-stream": {
      "command": "/opt/socialstream/socialstreamninja.AppImage",
      "args": ["--ssapp-mcp", "--ozone-platform=headless"],
      "env": {
        "SSAPP_CONTROL_URL": "http://127.0.0.1:17777"
      }
    }
  }
}

ตำแหน่งตั้งค่าขึ้นอยู่กับไคลเอนต์ การทำงานนี้เปิดอะแดปเตอร์แยกผ่านอินพุต/เอาต์พุตมาตรฐาน ไม่ได้เริ่มแอปจับข้อมูลหลัก ไคลเอนต์บนคอมพิวเตอร์ที่บ้านจะชี้ localhost ของตัวเอง ไม่ใช่ VPS ใช้การควบคุมระยะไกลปกติของ Social Stream จากคอมพิวเตอร์อื่น

อะแดปเตอร์ที่บรรจุไว้มีตั้งแต่ SSApp 0.4.7 รุ่น 0.4.14 ขึ้นไปประกาศชุดเครื่องมือครบแม้แอปยังไม่พร้อม ความสามารถสดยังเป็นตัวตัดสินว่าเรียกอะไรได้ ไม่ต้องติดตั้ง Node แยก แฟล็ก Ozone ไร้หน้าจอที่นี่ใช้เฉพาะอะแดปเตอร์ MCP แอปหลักยังต้องใช้ Xvfb

ลอง: “เรียก ssapp_get_capabilities แล้ว ssapp_get_status และ ssapp_list_sources บอกฉันว่าแหล่งใดกำลังจับข้อมูลและมีแหล่งใดรายงานข้อผิดพลาดหรือไม่” เครื่องมือยังครอบคลุมเริ่ม/หยุดแหล่ง วินิจฉัย อีเวนต์ที่จับ ภาพหน้าจอ และการโต้ตอบหน้าต่างแอปที่อนุมัติ การเข้าสู่ระบบส่วนตัวและ CAPTCHA ยังต้องใช้คน

ดู คู่มือ Local Control API และ MCP สำหรับสกิลเอเจนต์เพิ่มเติม ความเข้ากันได้ของเวอร์ชัน และการควบคุมอื่น

Owncast, Rocket.Chat และข้อความเด่น

คุณเรียก SSApp บน VPS เดียวกับ Owncast และ Rocket.Chat ได้หากทรัพยากรพอ การติดตั้ง SSApp อย่างเดียวไม่เชื่อม Rocket.Chat หรือใส่โอเวอร์เลย์ในวิดีโอ

Supported chat source → SSApp → Social Stream dock / featured overlay
                                           ↓
Video input → server broadcaster renders overlays → Owncast → viewers

ไม่มีตัวเชื่อม Rocket.Chat ในตัวในโค้ดต้นทางที่ตรวจสำหรับคู่มือนี้ ต้องมีการเชื่อมต่อแยกเพื่อนำข้อความเหล่านั้นเข้า Social Stream ยืนยันว่าข้อความถึงแผงด็อกก่อนตั้งโอเวอร์เลย์วิดีโอ

ใช้ URL แผงด็อกและโอเวอร์เลย์ Featured ที่คัดลอกตอนตั้งค่า โดยใช้เซสชัน/รหัสผ่านและช่องทางเดียวกัน เลือกข้อความที่จับได้ในแผงด็อกเพื่อแสดงเด่น ตัวส่งวิดีโอบนเซิร์ฟเวอร์ต้องแสดงแหล่งเบราว์เซอร์เพื่อวางหน้าเหล่านี้ทับวิดีโอก่อนส่งสตรีมรวมไป Owncast ดู คำแนะนำการถ่ายทอดของ Owncast SSApp ไม่ใช่ตัวส่งวิดีโอนั้น

โอเวอร์เลย์ที่วางทับตัวเล่นฝังบนเว็บไซต์ของคุณเป็นอีกทางเลือกหนึ่ง โดยปรากฏเฉพาะหน้านั้น ไม่ได้เป็นส่วนของวิดีโอที่ตัวเล่นอื่นหรือไฟล์บันทึกได้รับ เอกสาร Owncast อธิบาย การฝังวิดีโอและแชต.

หากต้องการปิดคอมพิวเตอร์ที่บ้าน แหล่งวิดีโอ ตัวส่งวิดีโอ การจับแชต และการเชื่อมต่อ Rocket.Chat ต้องทำงานต่อโดยไม่พึ่งเครื่องนั้น เผื่อทรัพยากรแสดงผลและเข้ารหัสวิดีโอแยกจากหน่วยความจำจับแชตของ SSApp

ตรวจขั้นตอนทั้งหมดก่อนปล่อยทำงานเอง

  1. ส่งข้อความจริงในแชตที่เชื่อมต่อและยืนยันว่าถึงแผงด็อก Social Stream
  2. นำข้อความนั้นมาแสดงเด่นและยืนยันว่าโอเวอร์เลย์ Featured เปลี่ยน สำหรับ Owncast ให้ตรวจในวิดีโอจริงของผู้ชมด้วย
  3. ตัด VNC และ SSH แล้วส่งข้อความเพิ่มต่อเนื่องหลายนาที การจับควรทำงานต่อ
  4. เรียก sudo systemctl restart ssapp แล้วยืนยันว่าเซสชันและแหล่งเดิมกลับมา และแหล่งที่เปิดอัตโนมัติรับข้อความใหม่
  5. ในช่วงบำรุงรักษา ให้รีบูต VPS แล้วตรวจข้อความซ้ำ การมีโปรเซสทำงานหรือ API ตอบสำเร็จอย่างเดียวไม่ได้ยืนยันว่าจับแชตได้

ใช้ sudo systemctl status ssapp และ sudo journalctl -u ssapp -n 100 --no-pager สำหรับสถานะบริการและล็อกล่าสุด หากตั้งใจหยุด ใช้ sudo systemctl stop ssapp.

สำหรับอัปเดต หยุดบริการ สำรอง /var/lib/ssapp, แทน AppImage ที่เส้นทางเดิม แล้วเริ่มบริการใหม่ เก็บไฟล์โปรแกรมเดิมไว้จนกว่าเวอร์ชันใหม่ผ่านการตรวจข้อความ

การแก้ปัญหา

ปัญหาสิ่งที่ต้องตรวจ
Missing X server or $DISPLAYเปิดผ่าน xvfb-run หรือเริ่ม Xvfb และตั้ง DISPLAY.
Xvfb ปิดทันทีคงค่า -extension GLX ในอาร์กิวเมนต์ Xvfb ไดรเวอร์ GPU ที่ติดตั้งบางตัวทำให้เริ่ม GLX ไม่ได้
เมานต์ AppImage ไม่ได้แตกไฟล์ด้วย ./socialstreamninja.AppImage --appimage-extract ในโฟลเดอร์ที่เขียนได้ แล้ววางโฟลเดอร์ที่แตกไว้ใน /opt/socialstream/squashfs-root แทนเส้นทาง AppImage ในคำสั่งตั้งค่า บริการ และ MCP ด้วย /opt/socialstream/squashfs-root/socialstreamninja.
คำสั่งระยะไกลไม่มาถึงยืนยันว่าทั้งสองฝั่งใช้เซสชันและรหัสผ่านเดียวกัน และเชื่อมต่อ WebRTC หรือโหมด WebSocket ที่โฮสต์ไว้แล้ว
แหล่งข้อมูลหรือการตั้งค่าปะปนระหว่างอินสแตนซ์กำหนดค่าต่างกันให้แต่ละอินสแตนซ์สำหรับ SSAPP_USER_DATA_DIR และจอเสมือน