105 lines
4 KiB
Bash
Executable file
105 lines
4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Instalador Automatizado: Sunshine Virtual Display (C Edition) para KDE Plasma 6 Wayland
|
|
# Compila e instala o daemon em C de alta performance para gerenciar display virtual automaticamente.
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
echo "=========================================================="
|
|
echo " Instalador: Sunshine Virtual Display (C Edition) "
|
|
echo "=========================================================="
|
|
echo ""
|
|
|
|
# 1. Instala dependências do sistema
|
|
echo "[1/6] Verificando dependências do sistema..."
|
|
if command -v pacman >/dev/null 2>&1; then
|
|
MISSING_PKGS=()
|
|
if ! command -v krfb-virtualmonitor >/dev/null 2>&1; then
|
|
MISSING_PKGS+=("krfb")
|
|
fi
|
|
if ! command -v kscreen-doctor >/dev/null 2>&1; then
|
|
MISSING_PKGS+=("libkscreen")
|
|
fi
|
|
if ! pacman -Qs cjson >/dev/null 2>&1; then
|
|
MISSING_PKGS+=("cjson")
|
|
fi
|
|
if ! command -v gcc >/dev/null 2>&1; then
|
|
MISSING_PKGS+=("gcc")
|
|
fi
|
|
|
|
if [ ${#MISSING_PKGS[@]} -gt 0 ]; then
|
|
echo "Instalando pacotes necessários: ${MISSING_PKGS[*]}..."
|
|
sudo pacman -S --needed --noconfirm "${MISSING_PKGS[@]}"
|
|
else
|
|
echo "Todas as dependências (krfb, libkscreen, cjson, gcc) já estão instaladas."
|
|
fi
|
|
else
|
|
echo "Aviso: Gerenciador pacman não detectado. Certifique-se de que krfb, libkscreen, cjson e gcc estejam instalados."
|
|
fi
|
|
|
|
# 2. Compila o binário em C
|
|
echo "[2/6] Compilando sunshine-display-daemon (C)..."
|
|
gcc -Wall -Wextra -Wpedantic -std=c11 -O2 \
|
|
"${SCRIPT_DIR}/sunshine-display-daemon.c" \
|
|
-o "${SCRIPT_DIR}/sunshine-display-daemon" \
|
|
-lcjson
|
|
strip "${SCRIPT_DIR}/sunshine-display-daemon" 2>/dev/null || true
|
|
|
|
# 3. Prepara diretórios do usuário e instala o binário
|
|
echo "[3/6] Instalando binário em ~/.local/bin/..."
|
|
mkdir -p "${HOME}/.local/bin"
|
|
mkdir -p "${HOME}/.config/systemd/user"
|
|
mkdir -p "${HOME}/.config/sunshine"
|
|
mkdir -p "${HOME}/.config/systemd/user/app-dev.lizardbyte.app.Sunshine.service.d"
|
|
|
|
cp -f "${SCRIPT_DIR}/sunshine-display-daemon" "${HOME}/.local/bin/sunshine-display-daemon"
|
|
chmod +x "${HOME}/.local/bin/sunshine-display-daemon"
|
|
|
|
# Limpa versão antiga em Python caso exista
|
|
rm -f "${HOME}/.local/bin/sunshine-display-daemon.py"
|
|
|
|
# 4. Configura o Sunshine para usar KWin capture
|
|
echo "[4/6] Configurando sunshine.conf (capture = kwin)..."
|
|
CONF_FILE="${HOME}/.config/sunshine/sunshine.conf"
|
|
if [ -f "$CONF_FILE" ]; then
|
|
if ! grep -q "^capture\s*=" "$CONF_FILE"; then
|
|
echo "capture = kwin" >> "$CONF_FILE"
|
|
else
|
|
sed -i 's/^capture\s*=.*/capture = kwin/' "$CONF_FILE"
|
|
fi
|
|
else
|
|
echo "capture = kwin" > "$CONF_FILE"
|
|
fi
|
|
|
|
# Remove o atraso de 5 segundos de fábrica do serviço Sunshine
|
|
cat << 'EOF' > "${HOME}/.config/systemd/user/app-dev.lizardbyte.app.Sunshine.service.d/override.conf"
|
|
[Service]
|
|
ExecStartPre=
|
|
EOF
|
|
|
|
# 5. Instala e ativa a unidade systemd
|
|
echo "[5/6] Instalando e ativando o serviço systemd de usuário..."
|
|
cp -f "${SCRIPT_DIR}/sunshine-virtual-display.service" "${HOME}/.config/systemd/user/sunshine-virtual-display.service"
|
|
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable sunshine-virtual-display.service
|
|
systemctl --user restart sunshine-virtual-display.service
|
|
|
|
# 6. Reinicia o Sunshine com as novas configurações
|
|
echo "[6/6] Reiniciando Sunshine..."
|
|
if systemctl --user is-enabled app-dev.lizardbyte.app.Sunshine.service >/dev/null 2>&1 || systemctl --user is-active app-dev.lizardbyte.app.Sunshine.service >/dev/null 2>&1; then
|
|
systemctl --user restart sunshine || true
|
|
fi
|
|
|
|
echo ""
|
|
echo "=========================================================="
|
|
echo " Instalação concluída com sucesso! (C Edition) "
|
|
echo "=========================================================="
|
|
echo " - Daemon em C instalado com consumo ultrabaixo (< 2MB RAM)"
|
|
echo " - Tela virtual 1080p será criada ao desligar o monitor. "
|
|
echo " - A imagem voltará para o monitor físico ao ligá-lo. "
|
|
echo " - Acompanhe os logs em: ~/.config/sunshine/vmon.log "
|
|
echo "=========================================================="
|