
While `scap` does have support for Wayland and Windows, but haven't seen screensharing work properly there yet. So for now just adding support for X11 screensharing. WIP branches for enabling wayland and windows support: * https://github.com/zed-industries/zed/tree/wayland-screenshare * https://github.com/zed-industries/zed/tree/windows-screenshare Release Notes: - Added support for screensharing on X11 (Linux) --------- Co-authored-by: Conrad <conrad@zed.dev> Co-authored-by: Mikayla <mikayla@zed.dev> Co-authored-by: Junkui Zhang <364772080@qq.com>
249 lines
5.6 KiB
Bash
Executable file
249 lines
5.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -xeuo pipefail
|
|
|
|
# if root or if sudo/unavailable, define an empty variable
|
|
if [ "$(id -u)" -eq 0 ]
|
|
then maysudo=''
|
|
else maysudo="$(command -v sudo || command -v doas || true)"
|
|
fi
|
|
|
|
function finalize {
|
|
# after packages install (curl, etc), get the rust toolchain
|
|
which rustup > /dev/null 2>&1 || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
# verify the mold situation
|
|
if ! command -v mold >/dev/null 2>&1; then
|
|
echo "Warning: Mold binaries are unavailable on your system." >&2
|
|
echo " Builds will be slower without mold. Try: script/install-mold" >&2
|
|
fi
|
|
echo "Finished installing Linux dependencies with script/linux"
|
|
}
|
|
|
|
# Ubuntu, Debian, Mint, Kali, Pop!_OS, Raspbian, etc.
|
|
apt=$(command -v apt-get || true)
|
|
if [[ -n $apt ]]; then
|
|
deps=(
|
|
gcc
|
|
g++
|
|
libasound2-dev
|
|
libfontconfig-dev
|
|
libwayland-dev
|
|
libx11-xcb-dev
|
|
libxkbcommon-x11-dev
|
|
libssl-dev
|
|
libzstd-dev
|
|
libvulkan1
|
|
libgit2-dev
|
|
make
|
|
cmake
|
|
clang
|
|
jq
|
|
netcat-openbsd
|
|
git
|
|
curl
|
|
gettext-base
|
|
elfutils
|
|
libsqlite3-dev
|
|
musl-tools
|
|
musl-dev
|
|
build-essential
|
|
)
|
|
if (grep -qP 'PRETTY_NAME="(Linux Mint 22|.+24\.(04|10))' /etc/os-release); then
|
|
deps+=( mold libstdc++-14-dev )
|
|
elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+12|Linux Mint 21|.+22\.04)' /etc/os-release); then
|
|
deps+=( mold libstdc++-12-dev )
|
|
elif (grep -qP 'PRETTY_NAME="((Debian|Raspbian).+11|Linux Mint 20|.+20\.04)' /etc/os-release); then
|
|
deps+=( libstdc++-10-dev )
|
|
fi
|
|
|
|
$maysudo "$apt" update
|
|
$maysudo "$apt" install -y "${deps[@]}"
|
|
finalize
|
|
exit 0
|
|
fi
|
|
|
|
# Fedora, CentOS, RHEL, Alma, Amazon 2023, Oracle, etc.
|
|
dnf=$(command -v dnf || true)
|
|
# Old Redhat (yum only): Amazon Linux 2, Oracle Linux 7, etc.
|
|
yum=$(command -v yum || true)
|
|
|
|
if [[ -n $dnf ]] || [[ -n $yum ]]; then
|
|
pkg_cmd="${dnf:-${yum}}"
|
|
deps=(
|
|
musl-gcc
|
|
gcc
|
|
clang
|
|
cmake
|
|
alsa-lib-devel
|
|
fontconfig-devel
|
|
wayland-devel
|
|
libxcb-devel
|
|
libxkbcommon-x11-devel
|
|
openssl-devel
|
|
libzstd-devel
|
|
vulkan-loader
|
|
sqlite-devel
|
|
jq
|
|
git
|
|
tar
|
|
)
|
|
# perl used for building openssl-sys crate. See: https://docs.rs/openssl/latest/openssl/
|
|
# openbsd-netcat is unavailable in RHEL8/9 (and nmap-ncat doesn't support sockets)
|
|
if grep -qP '^ID="?(fedora)' /etc/os-release; then
|
|
deps+=(
|
|
perl-FindBin
|
|
perl-IPC-Cmd
|
|
perl-File-Compare
|
|
perl-File-Copy
|
|
netcat
|
|
mold
|
|
)
|
|
elif grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release; then
|
|
deps+=( perl-interpreter )
|
|
fi
|
|
|
|
# gcc-c++ is g++ on RHEL8 and 8.x clones
|
|
if grep -qP '^ID="?(rhel|rocky|alma|centos|ol)' /etc/os-release \
|
|
&& grep -qP '^VERSION_ID="?(8)' /etc/os-release; then
|
|
deps+=( gcc-c++ )
|
|
else
|
|
deps+=( g++ )
|
|
fi
|
|
|
|
# libxkbcommon-x11-devel is in a non-default repo on RHEL 8.x/9.x (except on AmazonLinux)
|
|
if grep -qP '^VERSION_ID="?(8|9)' /etc/os-release && grep -qP '^ID="?(rhel|rocky|centos|alma|ol)' /etc/os-release; then
|
|
$maysudo dnf install -y 'dnf-command(config-manager)'
|
|
if grep -qP '^PRETTY_NAME="(AlmaLinux 8|Rocky Linux 8)' /etc/os-release; then
|
|
$maysudo dnf config-manager --set-enabled powertools
|
|
elif grep -qP '^PRETTY_NAME="((AlmaLinux|Rocky|CentOS Stream) 9|Red Hat.+(8|9))' /etc/os-release; then
|
|
$maysudo dnf config-manager --set-enabled crb
|
|
elif grep -qP '^PRETTY_NAME="Oracle Linux Server 8' /etc/os-release; then
|
|
$maysudo dnf config-manager --set-enabled ol8_codeready_builder
|
|
elif grep -qP '^PRETTY_NAME="Oracle Linux Server 9' /etc/os-release; then
|
|
$maysudo dnf config-manager --set-enabled ol9_codeready_builder
|
|
else
|
|
echo "Unexpected distro" && grep 'PRETTY_NAME' /etc/os-release && exit 1
|
|
fi
|
|
fi
|
|
|
|
$maysudo "$pkg_cmd" install -y "${deps[@]}"
|
|
finalize
|
|
exit 0
|
|
fi
|
|
|
|
# openSUSE
|
|
# https://software.opensuse.org/
|
|
zyp=$(command -v zypper || true)
|
|
if [[ -n $zyp ]]; then
|
|
deps=(
|
|
alsa-devel
|
|
clang
|
|
cmake
|
|
fontconfig-devel
|
|
gcc
|
|
gcc-c++
|
|
git
|
|
gzip
|
|
jq
|
|
libvulkan1
|
|
libxcb-devel
|
|
libxkbcommon-devel
|
|
libxkbcommon-x11-devel
|
|
libzstd-devel
|
|
make
|
|
mold
|
|
netcat-openbsd
|
|
openssl-devel
|
|
sqlite3-devel
|
|
tar
|
|
wayland-devel
|
|
xcb-util-devel
|
|
)
|
|
$maysudo "$zyp" install -y "${deps[@]}"
|
|
finalize
|
|
exit 0
|
|
fi
|
|
|
|
# Arch, Manjaro, etc.
|
|
# https://archlinux.org/packages
|
|
pacman=$(command -v pacman || true)
|
|
if [[ -n $pacman ]]; then
|
|
deps=(
|
|
gcc
|
|
clang
|
|
musl
|
|
cmake
|
|
alsa-lib
|
|
fontconfig
|
|
wayland
|
|
libgit2
|
|
libxcb
|
|
libxkbcommon-x11
|
|
openbsd-netcat
|
|
openssl
|
|
zstd
|
|
pkgconf
|
|
mold
|
|
sqlite
|
|
jq
|
|
git
|
|
)
|
|
$maysudo "$pacman" -Syu --needed --noconfirm "${deps[@]}"
|
|
finalize
|
|
exit 0
|
|
fi
|
|
|
|
# Void
|
|
# https://voidlinux.org/packages/
|
|
xbps=$(command -v xbps-install || true)
|
|
if [[ -n $xbps ]]; then
|
|
deps=(
|
|
gettext-devel
|
|
clang
|
|
cmake
|
|
jq
|
|
elfutils-devel
|
|
gcc
|
|
alsa-lib-devel
|
|
fontconfig-devel
|
|
libxcb-devel
|
|
libxkbcommon-devel
|
|
libzstd-devel
|
|
openbsd-netcat
|
|
openssl-devel
|
|
wayland-devel
|
|
vulkan-loader
|
|
mold
|
|
sqlite-devel
|
|
)
|
|
$maysudo "$xbps" -Syu "${deps[@]}"
|
|
finalize
|
|
exit 0
|
|
fi
|
|
|
|
# Gentoo
|
|
# https://packages.gentoo.org/
|
|
emerge=$(command -v emerge || true)
|
|
if [[ -n $emerge ]]; then
|
|
deps=(
|
|
app-arch/zstd
|
|
app-misc/jq
|
|
dev-libs/openssl
|
|
dev-libs/wayland
|
|
dev-util/cmake
|
|
media-libs/alsa-lib
|
|
media-libs/fontconfig
|
|
media-libs/vulkan-loader
|
|
net-analyzer/openbsd-netcat
|
|
x11-libs/libxcb
|
|
x11-libs/libxkbcommon
|
|
sys-devel/mold
|
|
dev-db/sqlite
|
|
)
|
|
$maysudo "$emerge" -u "${deps[@]}"
|
|
finalize
|
|
exit 0
|
|
fi
|
|
|
|
echo "Unsupported Linux distribution in script/linux"
|
|
exit 1
|