#!/bin/sh # Install AnyBot on a Linux desktop for the current user (no root needed for this part). # # ./deploy/linux/install.sh build from source, then install # ./deploy/linux/install.sh --deps also install the system packages (asks for sudo) # ./deploy/linux/install.sh --deps-only only the system packages (make deps) # # Puts the app in ~/.local/bin/anybot, the menu entry in ~/.local/share/applications and the # icon in ~/.local/share/icons. Run it from the app/ folder. set -e cd "$(dirname "$0")/../.." # What AnyBot uses on Linux (all optional except the first line; the app explains what's missing): # libasound2 libxkbcommon-x11-0 libgl1 xdg-utils – the window and sound # libnotify-bin notifications libsecret-tools saved logins (系統鑰匙圈) # espeak-ng reading answers aloud zenity file pickers # xclip / wl-clipboard pasting pictures; typing Chinese on GNOME/KDE Wayland # ffmpeg video posters, Opus, demo videos # docker.io the bot's own computer fonts-noto-cjk extra CJK glyphs (粉圓體 is built in) DEPS_DEBIAN="libasound2 libxkbcommon-x11-0 libgl1 xdg-utils libnotify-bin libsecret-tools espeak-ng zenity xclip wl-clipboard ffmpeg docker.io fonts-noto-cjk" DEPS_FEDORA="alsa-lib libxkbcommon-x11 mesa-libGL xdg-utils libnotify libsecret espeak-ng zenity xclip wl-clipboard ffmpeg-free moby-engine google-noto-sans-cjk-fonts" DEPS_ARCH="alsa-lib libxkbcommon-x11 mesa xdg-utils libnotify libsecret espeak-ng zenity xclip wl-clipboard ffmpeg docker noto-fonts-cjk" BUILD_DEBIAN="build-essential pkg-config libasound2-dev" # The package lists above are for reference; ../../install.sh installs them (it picks the right # names per release, e.g. libasound2t64 on Ubuntu 24.04, and installs Rust when it's missing). if [ "${1:-}" = "--deps" ] || [ "${1:-}" = "--deps-only" ]; then sh ./install.sh deps fi [ "${1:-}" = "--deps-only" ] && exit 0 OUT="${CARGO_TARGET_DIR:-target}/release/anybot" if [ -x "$OUT" ] && [ "${1:-}" != "--rebuild" ]; then echo "Using the existing build ($OUT)." else command -v cargo >/dev/null || { echo "Rust is needed to build: https://rustup.rs"; exit 1; } cargo build --release fi BIN="$HOME/.local/bin" APPS="$HOME/.local/share/applications" ICONS="$HOME/.local/share/icons/hicolor" mkdir -p "$BIN" "$APPS" "$ICONS/256x256/apps" "$ICONS/128x128/apps" "$ICONS/scalable/apps" install -m 755 "$OUT" "$BIN/anybot" install -m 644 deploy/linux/anybot.desktop "$APPS/anybot.desktop" install -m 644 icons/anybot.svg "$ICONS/scalable/apps/anybot.svg" "$BIN/anybot" --write-icon "$ICONS/256x256/apps/anybot.png" 256 "$BIN/anybot" --write-icon "$ICONS/128x128/apps/anybot.png" 128 command -v update-desktop-database >/dev/null && update-desktop-database "$APPS" 2>/dev/null || true command -v gtk-update-icon-cache >/dev/null && gtk-update-icon-cache -q "$ICONS" 2>/dev/null || true echo "AnyBot is installed: find it in your app menu, or run: anybot" echo "To make this computer a brain, or hands for your brain (also without a screen): anybot setup" case ":$PATH:" in *":$BIN:"*) ;; *) echo "(Add $BIN to your PATH to start it from a terminal.)" ;; esac if [ "${XDG_SESSION_TYPE:-}" = "wayland" ]; then echo "Wayland: bots can see and use your screen. On GNOME/KDE the first time, a system window asks:" echo " turn on 「允許遠端操作」 (Allow remote interaction), then press 「分享」 (Share)." echo " Recording a demonstration (教它一項任務) needs an Xorg session." fi