Exécuter Social Stream Ninja sans interface

Gardez l'application de bureau complète en capture sur un serveur domestique ou VPS Ubuntu ou Debian sans moniteur physique.

Accéder à configuration initiale, API HTTP, MCP, Owncast et Rocket.Chat, ou vérification de la capture.

Oui — utilisez l'AppImage Linux habituelle

Téléchargez l'application Linux habituelle et rendez-la exécutable. Sur un VPS sans bureau, lancer l'AppImage seule ne suffit pas : utilisez un affichage virtuel et l'option --ssapp-headless-control option. Les étapes ci-dessous maintiennent la capture du chat après la déconnexion SSH et après un redémarrage du serveur.

Le mode sans interface masque les fenêtres Electron de SSApp, mais les pages sources restent de vraies fenêtres de navigateur. Linux nécessite donc un affichage virtuel tel que Xvfb. Il ne s'agit pas d'un petit service de chat fonctionnant uniquement en arrière-plan.

Le mode sans interface ne crée pas d'API de contrôle publique. Un contrôleur sur un autre ordinateur utilise la même session Social Stream et le transport WebRTC habituel ou WebSocket hébergé, comme les autres flux de contrôle à distance.

Avant de commencer

  • Utilisez Ubuntu 22.04+, Debian 12+ ou une distribution Linux similaire.
  • Prévoyez au moins 2 Go de mémoire pour une petite configuration et davantage pour plusieurs fenêtres de sources.
  • Choisissez un dossier de profil persistant pour les paramètres, sources, sessions et données du navigateur.
  • Prévoyez une session de bureau ou VNC unique pour les connexions et les autres paramètres privés.

Les URL de sources publiques ne nécessitant pas de connexion sont les plus simples à exploiter à distance. OAuth, CAPTCHA, mots de passe, cookies et configuration des comptes exigent toujours une personne.

1. Installer Xvfb et l'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

Téléchargez l'AppImage Linux actuelle depuis la page de téléchargement Social Stream Ninja. Choisissez le téléchargement correspondant à l'architecture de votre serveur (uname -m), puis remplacez YOUR_DOWNLOADED_FILE.AppImage ci-dessus par son nom de fichier exact. Une copie du code source et une installation séparée de Node ne sont pas nécessaires.

2. Préparer le profil et se connecter une fois

Utilisez le même compte et le même dossier de données pour la configuration et le service en arrière-plan. Créez un compte dédié :

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

Laissez ce terminal ouvert. Dans un deuxième terminal SSH, ouvrez SSApp de manière visible sur cet affichage virtuel :

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

Dans un troisième terminal SSH, démarrez un accès VNC temporaire limité au serveur lui-même :

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

Sur votre propre ordinateur, ouvrez un tunnel SSH :

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

Connectez votre client VNC à localhost:5900. Définissez l'identifiant de session Social Stream et le mot de passe facultatif, ajoutez des sources et effectuez les connexions nécessaires. Activez Activation automatique (Auto-activate) sur les sources que vous souhaitez lancer au démarrage de SSApp. Copiez les liens de votre Dock de chat et de l'incrustation de mise en avant pour les utiliser plus tard.

Quittez SSApp après la configuration, puis arrêtez VNC, le tunnel et Xvfb avec Ctrl+C dans leurs terminaux. N'exécutez pas simultanément la configuration et le service sur le même profil. VNC relié à une instance déjà sans interface affichera normalement un écran vide, car ses fenêtres sont masquées.

Utilisez SSAPP_USER_DATA_DIR, pas celui de Chromium --user-data-dir. Effectuez les connexions sur le VPS ; les cookies de navigateur copiés depuis un autre système d'exploitation peuvent ne pas être déchiffrables.

3. Démarrer l'application sans interface

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

Le --ssapp-headless-control l'option garde les fenêtres de l'application masquées. Cette commande au premier plan s'arrête lorsque vous l'arrêtez ; utilisez le service systemd ci-dessous pour un fonctionnement sans surveillance. L'application principale nécessite toujours Xvfb ; --ozone-platform=headless ne remplace pas l'affichage virtuel.

4. La contrôler depuis un autre ordinateur

Utilisez le même identifiant de session Social Stream et le même mot de passe facultatif sur l'application sans interface et le contrôleur distant. WebRTC est le transport normal. S'il ne convient pas à l'environnement, utilisez le mode serveur WebSocket hébergé de Social Stream.

Les commandes à distance prises en charge peuvent ajouter, démarrer, arrêter, redémarrer, mettre en sourdine et masquer les sources publiques. Elles ne réalisent pas à distance les connexions, OAuth, CAPTCHA, cookies, identifiants ni les autres paramètres privés de compte.

Voir Sessions, mots de passe, relais et modes serveur lorsque le contrôleur distant se connecte mais que les messages ou commandes n'arrivent pas.

Maintenir l'exécution avec systemd

Arrêtez d'abord l'application au premier plan avec Ctrl+C. Créez /etc/systemd/system/ssapp.service avec sudo nano /etc/systemd/system/ssapp.service et collez cette 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

Le service utilise le compte et le profil créés à l'étape 2. Il démarre au démarrage du système et redémarre après une défaillance de l'application. Si vous avez changé le chemin d'installation, mettez à jour ExecStart en conséquence.

API HTTP facultative pour les scripts sur le VPS

Le mode sans interface n'active pas l'API de contrôle. Pour l'activer pour votre service, exécutez sudo systemctl edit ssapp et enregistrez cette surcharge :

[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

Pour un lancement manuel, ajoutez --ssapp-control-api à la commande de l'application à la place. Exécutez les commandes suivantes dans un shell SSH sur le VPS. L'API n'a volontairement aucun jeton et écoute uniquement sur 127.0.0.1; il est distinct de votre serveur web Owncast ou Rocket.Chat. Gardez-le local.

Lisez ssappVersion, apiVersion, et les plateformes prises en charge dans les capacités. Par exemple, si Twitch est pris en charge, ajoutez une source (remplacez 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":{}}' 

Copiez l'identifiant stable de la source id dans la liste de sources renvoyée et remplacez SOURCE_ID ci-dessous. Ajouter une source la laisse inactive ; autoActivate contrôle les prochains lancements de l'application.

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"}}' 

Vérifiez ok et payload dans chaque réponse ; les échecs renvoient error. Lisez l'état après une modification. Si une requête expire, vérifiez l'état avant de la retenter. Arrêtez une source avant de modifier ses champs de connexion. Les commandes de rechargement, de suppression et d'arrêt nécessitent confirm: true.

curl -N http://127.0.0.1:17777/api/v1/events suit le flux Server-Sent Events jusqu'à Ctrl+C. Consultez le guide API et MCP pour la référence complète. Il s'agit de commandes de l'application/des sources ; les actions d'incrustation telles que la mise en avant d'un message utilisent le Dock Social Stream et commandes Social Stream.

MCP facultatif pour un client IA sur le VPS

MCP permet à un client IA compatible d'appeler les commandes SSApp comme outils. Activez l'API ci-dessus et gardez le service de l'application principale en cours d'exécution. Enregistrez cette configuration dans un client exécuté sur le 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"
      }
    }
  }
}

L'emplacement de la configuration dépend du client. Cela lance un adaptateur distinct via l'entrée/sortie standard ; cela ne démarre pas l'application principale de capture. Un client sur votre ordinateur personnel pointerait vers son propre localhost, pas vers votre VPS. Utilisez les commandes à distance habituelles de Social Stream depuis un autre ordinateur.

L'adaptateur inclus est disponible depuis SSApp 0.4.7 ; les versions 0.4.14 et suivantes annoncent tous les outils avant même que l'application soit disponible. Les capacités en direct déterminent toujours quels appels fonctionnent. Aucune installation séparée de Node n'est nécessaire. L'option Ozone sans interface utilisée ici s'applique uniquement à l'adaptateur MCP ; conservez Xvfb pour l'application principale.

Essayez : « Appelle ssapp_get_capabilities, puis ssapp_get_status et ssapp_list_sources. Indique-moi quelles sources capturent et si certaines signalent des erreurs. » Les outils couvrent aussi le démarrage/l'arrêt des sources, les diagnostics, les événements capturés, les captures d'écran et les interactions approuvées avec les fenêtres de l'application. Les connexions privées et CAPTCHA nécessitent toujours une personne.

Consultez : Guide de l'API de contrôle local et de MCP pour la compétence d'agent facultative, la compatibilité des versions et d'autres commandes.

Owncast, Rocket.Chat et messages mis en avant

Vous pouvez exécuter SSApp sur le même VPS qu'Owncast et Rocket.Chat s'il possède suffisamment de ressources. Installer SSApp ne connecte pas à lui seul Rocket.Chat et n'ajoute pas d'incrustations à la vidéo.

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

Il n'existe aucun connecteur Rocket.Chat intégré dans les arborescences de sources vérifiées pour ce guide. Une intégration distincte est nécessaire pour importer ces messages dans Social Stream. Vérifiez que les messages atteignent le Dock avant de configurer l'incrustation vidéo.

Utilisez les URL du Dock et de l'incrustation de mise en avant copiées pendant la configuration, avec les mêmes session, mot de passe et transport. Sélectionnez un message capturé dans le Dock pour le mettre en avant. Votre logiciel de diffusion sur le serveur doit pouvoir afficher des sources navigateur pour placer ces pages sur la vidéo avant d'envoyer le flux combiné à Owncast. Voir instructions de diffusion Owncast. SSApp n'est pas ce logiciel de diffusion vidéo.

Une incrustation placée au-dessus d'un lecteur intégré sur votre site web est une autre option : elle apparaît sur cette page au lieu de faire partie de la vidéo reçue par les autres lecteurs ou enregistrements. Owncast documente l'intégration de la vidéo et du chat.

Pour pouvoir éteindre votre ordinateur personnel, la source vidéo, le logiciel de diffusion, la capture du chat et toute intégration Rocket.Chat doivent continuer à fonctionner indépendamment de lui. Prévoyez les ressources de rendu et d'encodage vidéo séparément de la mémoire de capture du chat de SSApp.

Vérifier le fonctionnement complet avant de laisser tourner sans surveillance

  1. Envoyez un vrai message dans un chat connecté et vérifiez qu'il arrive dans votre Dock Social Stream.
  2. Mettez ce message en avant et vérifiez que l'incrustation de mise en avant change. Pour Owncast, vérifiez-le aussi dans la vidéo réellement vue par les spectateurs.
  3. Déconnectez VNC et SSH, puis envoyez d'autres messages pendant plusieurs minutes. La capture doit continuer.
  4. Exécutez sudo systemctl restart ssapp, puis vérifiez que la même session et les mêmes sources reviennent et que les sources activées automatiquement reçoivent de nouveaux messages.
  5. Pendant une plage de maintenance, redémarrez le VPS et répétez la vérification des messages. Un processus en cours ou une réponse API réussie ne prouve pas à lui seul que la capture du chat fonctionne.

Utilisez sudo systemctl status ssapp et sudo journalctl -u ssapp -n 100 --no-pager pour l'état du service et les journaux récents. Pour l'arrêter volontairement, utilisez sudo systemctl stop ssapp.

Pour les mises à jour, arrêtez le service, sauvegardez /var/lib/ssapp, remplacez l'AppImage au même chemin et redémarrez le service. Conservez l'exécutable précédent jusqu'à ce que la nouvelle version réussisse les vérifications des messages.

Dépannage

ProblèmePoints à vérifier
Missing X server or $DISPLAYLancez via xvfb-run ou démarrez Xvfb et définissez DISPLAY.
Xvfb se ferme immédiatementGardez -extension GLX dans les arguments Xvfb ; certains pilotes graphiques installés perturbent son démarrage GLX.
L'AppImage ne se monte pasExtrayez avec ./socialstreamninja.AppImage --appimage-extract dans un dossier accessible en écriture, puis placez le dossier extrait dans /opt/socialstream/squashfs-root. Remplacez le chemin de l'AppImage dans les commandes de configuration, de service et MCP par /opt/socialstream/squashfs-root/socialstreamninja.
Les commandes à distance n'arrivent pasVérifiez que les deux côtés utilisent la même session et le même mot de passe et que WebRTC ou le mode WebSocket hébergé est connecté.
Les sources ou paramètres se mélangent entre les instancesDonnez à chaque instance un SSAPP_USER_DATA_DIR et affichage virtuel distincts.