From 0eeb0bacbd828f86822afdc13b1eeb454149874a Mon Sep 17 00:00:00 2001 From: Kingtous Date: Sun, 29 May 2022 10:14:22 +0800 Subject: [PATCH 1/3] add: appimage config --- appimage/AppDir/rustdesk.desktop | 19 +++ appimage/AppImageBuilder.yml | 199 +++++++++++++++++++++++++++++++ build_appimage.py | 8 ++ src/common.rs | 8 +- src/ui.rs | 5 +- 5 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 appimage/AppDir/rustdesk.desktop create mode 100644 appimage/AppImageBuilder.yml create mode 100644 build_appimage.py diff --git a/appimage/AppDir/rustdesk.desktop b/appimage/AppDir/rustdesk.desktop new file mode 100644 index 000000000..f2e8b80b7 --- /dev/null +++ b/appimage/AppDir/rustdesk.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Version=1.2.0 +Name=RustDesk +GenericName=Remote Desktop +Comment=Remote Desktop +Exec=rustdesk +Icon=rustdesk +Terminal=false +Type=Application +StartupNotify=true +Categories=Other; +Keywords=internet; +Actions=new-window; + +X-Desktop-File-Install-Version=0.23 + +[Desktop Action new-window] +Name=Open a New Window + diff --git a/appimage/AppImageBuilder.yml b/appimage/AppImageBuilder.yml new file mode 100644 index 000000000..8e2b89318 --- /dev/null +++ b/appimage/AppImageBuilder.yml @@ -0,0 +1,199 @@ +# appimage-builder recipe see https://appimage-builder.readthedocs.io for details +version: 1 +AppDir: + path: /home/kingtous/projects/rustdesk/appimage/AppDir + app_info: + id: rustdesk + name: RustDesk + icon: rustdesk + version: latest + exec: usr/bin/rustdesk + exec_args: $@ + pacman: + include: + - at-spi2-atk + - at-spi2-core + - atk + - brotli + - bzip2 + - cairo + - dbus-x11 + - expat + - flac + - fontconfig + - freetype2 + - fribidi + - gcc-libs + - gdk-pixbuf2 + - glib2 + - glibc-linux4 + - graphite-mozilla + - gtk3-no-tracker + - harfbuzz + - icu + - json-glib + - libasyncns + - libcap + - libcloudproviders + - libdatrie + - libepoxy + - libffi + - libgcrypt + - libgpg-error + - libjpeg-turbo + - libogg + - libpng + - libpulse + - libsndfile + - libstemmer + - libthai + - libtiff + - libvorbis + - libx11 + - libxau + - libxcb + - libxcomposite + - libxcursor + - libxdamage + - libxdmcp + - libxext + - libxfixes + - libxi + - libxinerama + - libxkbcommon + - libxml2 + - libxrandr + - libxrender + - libxtst + - lz4 + - opus + - pango + - pcre + - pixman + - sqlite + - systemd-libs-git + - tracker3 + - util-linux-libs + - wayland + - xdotool + - xz + - zlib + - zstd + exclude: [] + files: + include: + - /lib64/ld-linux-x86-64.so.2 + - /usr/lib/ld-linux-x86-64.so.2 + - /usr/lib/libFLAC.so.8 + - /usr/lib/libX11.so.6 + - /usr/lib/libXau.so.6 + - /usr/lib/libXcomposite.so.1 + - /usr/lib/libXcursor.so.1 + - /usr/lib/libXdamage.so.1 + - /usr/lib/libXdmcp.so.6 + - /usr/lib/libXext.so.6 + - /usr/lib/libXfixes.so.3 + - /usr/lib/libXi.so.6 + - /usr/lib/libXinerama.so.1 + - /usr/lib/libXrandr.so.2 + - /usr/lib/libXrender.so.1 + - /usr/lib/libXtst.so.6 + - /usr/lib/libasyncns.so.0 + - /usr/lib/libatk-1.0.so.0 + - /usr/lib/libatk-bridge-2.0.so.0 + - /usr/lib/libatspi.so.0 + - /usr/lib/libblkid.so.1 + - /usr/lib/libbrotlicommon.so.1 + - /usr/lib/libbrotlidec.so.1 + - /usr/lib/libbz2.so.1.0 + - /usr/lib/libc.so.6 + - /usr/lib/libcairo-gobject.so.2 + - /usr/lib/libcairo.so.2 + - /usr/lib/libcap.so.2 + - /usr/lib/libcloudproviders.so.0 + - /usr/lib/libdatrie.so.1 + - /usr/lib/libdbus-1.so.3 + - /usr/lib/libepoxy.so.0 + - /usr/lib/libexpat.so.1 + - /usr/lib/libffi.so.8 + - /usr/lib/libfontconfig.so.1 + - /usr/lib/libfreetype.so.6 + - /usr/lib/libfribidi.so.0 + - /usr/lib/libgcc_s.so.1 + - /usr/lib/libgcrypt.so.20 + - /usr/lib/libgdk-3.so.0 + - /usr/lib/libgdk_pixbuf-2.0.so.0 + - /usr/lib/libgio-2.0.so.0 + - /usr/lib/libglib-2.0.so.0 + - /usr/lib/libgmodule-2.0.so.0 + - /usr/lib/libgobject-2.0.so.0 + - /usr/lib/libgpg-error.so.0 + - /usr/lib/libgraphite2.so.3 + - /usr/lib/libgtk-3.so.0 + - /usr/lib/libharfbuzz.so.0 + - /usr/lib/libicudata.so.71 + - /usr/lib/libicui18n.so.71 + - /usr/lib/libicuuc.so.71 + - /usr/lib/libjpeg.so.8 + - /usr/lib/libjson-glib-1.0.so.0 + - /usr/lib/liblz4.so.1 + - /usr/lib/liblzma.so.5 + - /usr/lib/libm.so.6 + - /usr/lib/libmount.so.1 + - /usr/lib/libogg.so.0 + - /usr/lib/libopus.so.0 + - /usr/lib/libpango-1.0.so.0 + - /usr/lib/libpangocairo-1.0.so.0 + - /usr/lib/libpangoft2-1.0.so.0 + - /usr/lib/libpcre.so.1 + - /usr/lib/libpixman-1.so.0 + - /usr/lib/libpng16.so.16 + - /usr/lib/libpthread.so.0 + - /usr/lib/libpulse-simple.so.0 + - /usr/lib/libpulse.so.0 + - /usr/lib/libsndfile.so.1 + - /usr/lib/libsqlite3.so.0 + - /usr/lib/libstdc++.so.6 + - /usr/lib/libstemmer.so.0 + - /usr/lib/libsystemd.so.0 + - /usr/lib/libthai.so.0 + - /usr/lib/libtiff.so.5 + - /usr/lib/libtracker-sparql-3.0.so.0 + - /usr/lib/libvorbis.so.0 + - /usr/lib/libvorbisenc.so.2 + - /usr/lib/libwayland-client.so.0 + - /usr/lib/libwayland-cursor.so.0 + - /usr/lib/libwayland-egl.so.1 + - /usr/lib/libxcb-randr.so.0 + - /usr/lib/libxdo.so.3 + - /usr/lib/libxkbcommon.so.0 + - /usr/lib/libxml2.so.2 + - /usr/lib/libz.so.1 + - /usr/lib/libzstd.so.1 + - /usr/lib/locale/locale-archive + - /usr/lib/pulseaudio/libpulsecommon-15.0.so + exclude: + - usr/share/man + - usr/share/doc/*/README.* + - usr/share/doc/*/changelog.* + - usr/share/doc/*/NEWS.* + - usr/share/doc/*/TODO.* + test: + fedora-30: + image: appimagecrafters/tests-env:fedora-30 + command: ./AppRun + debian-stable: + image: appimagecrafters/tests-env:debian-stable + command: ./AppRun + archlinux-latest: + image: appimagecrafters/tests-env:archlinux-latest + command: ./AppRun + centos-7: + image: appimagecrafters/tests-env:centos-7 + command: ./AppRun + ubuntu-xenial: + image: appimagecrafters/tests-env:ubuntu-xenial + command: ./AppRun +AppImage: + arch: x86_64 + update-information: guess diff --git a/build_appimage.py b/build_appimage.py new file mode 100644 index 000000000..2abe221f2 --- /dev/null +++ b/build_appimage.py @@ -0,0 +1,8 @@ +#!/usr/bin/python3 +import os + + + +if __name__ == '__main__': + + pass \ No newline at end of file diff --git a/src/common.rs b/src/common.rs index 39503ace6..58220a438 100644 --- a/src/common.rs +++ b/src/common.rs @@ -14,7 +14,7 @@ use hbb_common::{ }; #[cfg(any(target_os = "android", target_os = "ios", feature = "cli"))] use hbb_common::{config::RENDEZVOUS_PORT, futures::future::join_all}; -use std::sync::{Arc, Mutex}; +use std::{sync::{Arc, Mutex}, path::Path}; pub const CLIPBOARD_NAME: &'static str = "clipboard"; pub const CLIPBOARD_INTERVAL: u64 = 333; @@ -377,8 +377,10 @@ pub fn get_time() -> i64 { } pub fn run_me>(args: Vec) -> std::io::Result { - let cmd = std::env::current_exe()?; - return std::process::Command::new(cmd).args(&args).spawn(); + let cmd = std::env::var("APPDIR").unwrap(); + let p = Path::new(&cmd).join("AppRun"); + log::info!("path: {:?}", p); + return std::process::Command::new(p).args(&args).spawn(); } pub fn username() -> String { diff --git a/src/ui.rs b/src/ui.rs index 6a084552d..5ab028a28 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -56,7 +56,10 @@ pub fn start(args: &mut [String]) { macos::show_dock(); } #[cfg(all(target_os = "linux", feature = "inline"))] - sciter::set_library("/usr/lib/rustdesk/libsciter-gtk.so").ok(); + { + let prefix = std::env::var("APPDIR").unwrap_or("".to_string()); + sciter::set_library(&(prefix + "/usr/lib/rustdesk/libsciter-gtk.so")).ok(); + } // https://github.com/c-smile/sciter-sdk/blob/master/include/sciter-x-types.h // https://github.com/rustdesk/rustdesk/issues/132#issuecomment-886069737 #[cfg(windows)] From 618be487260402ee4b2f6c28df0bbf31bd67db6b Mon Sep 17 00:00:00 2001 From: Kingtous Date: Thu, 9 Jun 2022 17:30:26 +0800 Subject: [PATCH 2/3] feat: appimage package script revert: flutter lock file --- .gitignore | 4 + Cargo.toml | 1 + appimage/AppImageBuilder.yml | 275 ++++++++++--------------- appimage/README.md | 20 ++ appimage/requirements.txt | 1 + appimage/{AppDir => }/rustdesk.desktop | 0 build_appimage.py | 11 +- libs/enigo/src/linux.rs | 6 +- src/common.rs | 16 +- src/ui.rs | 3 + 10 files changed, 166 insertions(+), 171 deletions(-) create mode 100644 appimage/README.md create mode 100644 appimage/requirements.txt rename appimage/{AppDir => }/rustdesk.desktop (100%) mode change 100644 => 100755 build_appimage.py diff --git a/.gitignore b/.gitignore index 21fd9e12e..5b26711c5 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,7 @@ sciter.dll src/bridge_generated.rs *deb rustdesk +# appimage +appimage/AppDir +appimage/*.AppImage +appimage/appimage-build \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 5378d3324..ddf93a92a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ inline = [] hbbs = [] cli = [] with_rc = ["simple_rc"] +appimage = [] use_samplerate = ["samplerate"] use_rubato = ["rubato"] use_dasp = ["dasp"] diff --git a/appimage/AppImageBuilder.yml b/appimage/AppImageBuilder.yml index 8e2b89318..81568b399 100644 --- a/appimage/AppImageBuilder.yml +++ b/appimage/AppImageBuilder.yml @@ -1,183 +1,134 @@ # appimage-builder recipe see https://appimage-builder.readthedocs.io for details +# Tested Linux Distro: Ubuntu 20.04 LTS version: 1 +script: + # Remove any previous build + - rm -rf AppDir | true + # Install application dependencies + - pip3 install --system --ignore-installed --prefix=/usr --root=AppDir -r ./requirements.txt + # Download sciter.so + - mkdir -p AppDir/usr/lib/rustdesk/ + - curl https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so -o AppDir/usr/lib/rustdesk/libsciter-gtk.so + # pynput_service.py + - cp ../pynput_service.py ./AppDir/usr/lib/rustdesk + # Build rustdesk + - pushd .. && python3 inline-sciter.py && cargo build --features inline,appimage --release && popd + - mkdir -p AppDir/usr/bin + - cp ../target/release/rustdesk AppDir/usr/bin/rustdesk + # Make usr and icons dirs + - mkdir -p AppDir/usr/share/icons/hicolor/128x128 && cp ../128x128.png AppDir/usr/share/icons/hicolor/128x128/rustdesk.png + - mkdir -p AppDir/usr/share/icons/hicolor/32x32 && cp ../32x32.png AppDir/usr/share/icons/hicolor/32x32/rustdesk.png + - cp rustdesk.desktop AppDir/ + AppDir: - path: /home/kingtous/projects/rustdesk/appimage/AppDir + path: ./AppDir app_info: id: rustdesk name: RustDesk icon: rustdesk - version: latest + version: 1.2.0 exec: usr/bin/rustdesk exec_args: $@ - pacman: + apt: + arch: + - amd64 + allow_unauthenticated: true + sources: + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal main restricted + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal universe + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates universe + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-updates multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted + universe multiverse + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-security universe + - sourceline: deb http://archive.ubuntu.com/ubuntu/ focal-security multiverse include: - - at-spi2-atk - - at-spi2-core - - atk - - brotli - - bzip2 - - cairo - - dbus-x11 - - expat - - flac - - fontconfig - - freetype2 - - fribidi - - gcc-libs - - gdk-pixbuf2 - - glib2 - - glibc-linux4 - - graphite-mozilla - - gtk3-no-tracker - - harfbuzz - - icu - - json-glib - - libasyncns - - libcap - - libcloudproviders - - libdatrie - - libepoxy - - libffi - - libgcrypt - - libgpg-error - - libjpeg-turbo - - libogg - - libpng - - libpulse - - libsndfile - - libstemmer - - libthai - - libtiff - - libvorbis - - libx11 - - libxau - - libxcb - - libxcomposite - - libxcursor - - libxdamage - - libxdmcp - - libxext - - libxfixes - - libxi - - libxinerama - - libxkbcommon - - libxml2 - - libxrandr - - libxrender - - libxtst - - lz4 - - opus - - pango - - pcre - - pixman - - sqlite - - systemd-libs-git - - tracker3 - - util-linux-libs - - wayland - - xdotool - - xz - - zlib - - zstd - exclude: [] + - libexpat1:amd64 + - libgcc-s1:amd64 + - libgpg-error0:amd64 + - liblzma5:amd64 + - libmount1:amd64 + - libpcre3:amd64 + - libpulse0:amd64 + - libsystemd0:amd64 + - libuuid1:amd64 + - zlib1g:amd64 + - python3:amd64 + - python3-pkg-resources:amd64 files: include: - - /lib64/ld-linux-x86-64.so.2 - - /usr/lib/ld-linux-x86-64.so.2 - - /usr/lib/libFLAC.so.8 - - /usr/lib/libX11.so.6 - - /usr/lib/libXau.so.6 - - /usr/lib/libXcomposite.so.1 - - /usr/lib/libXcursor.so.1 - - /usr/lib/libXdamage.so.1 - - /usr/lib/libXdmcp.so.6 - - /usr/lib/libXext.so.6 - - /usr/lib/libXfixes.so.3 - - /usr/lib/libXi.so.6 - - /usr/lib/libXinerama.so.1 - - /usr/lib/libXrandr.so.2 - - /usr/lib/libXrender.so.1 - - /usr/lib/libXtst.so.6 - - /usr/lib/libasyncns.so.0 - - /usr/lib/libatk-1.0.so.0 - - /usr/lib/libatk-bridge-2.0.so.0 - - /usr/lib/libatspi.so.0 - - /usr/lib/libblkid.so.1 - - /usr/lib/libbrotlicommon.so.1 - - /usr/lib/libbrotlidec.so.1 - - /usr/lib/libbz2.so.1.0 - - /usr/lib/libc.so.6 - - /usr/lib/libcairo-gobject.so.2 - - /usr/lib/libcairo.so.2 - - /usr/lib/libcap.so.2 - - /usr/lib/libcloudproviders.so.0 - - /usr/lib/libdatrie.so.1 - - /usr/lib/libdbus-1.so.3 - - /usr/lib/libepoxy.so.0 - - /usr/lib/libexpat.so.1 - - /usr/lib/libffi.so.8 - - /usr/lib/libfontconfig.so.1 - - /usr/lib/libfreetype.so.6 - - /usr/lib/libfribidi.so.0 - - /usr/lib/libgcc_s.so.1 - - /usr/lib/libgcrypt.so.20 - - /usr/lib/libgdk-3.so.0 - - /usr/lib/libgdk_pixbuf-2.0.so.0 - - /usr/lib/libgio-2.0.so.0 - - /usr/lib/libglib-2.0.so.0 - - /usr/lib/libgmodule-2.0.so.0 - - /usr/lib/libgobject-2.0.so.0 - - /usr/lib/libgpg-error.so.0 - - /usr/lib/libgraphite2.so.3 - - /usr/lib/libgtk-3.so.0 - - /usr/lib/libharfbuzz.so.0 - - /usr/lib/libicudata.so.71 - - /usr/lib/libicui18n.so.71 - - /usr/lib/libicuuc.so.71 - - /usr/lib/libjpeg.so.8 - - /usr/lib/libjson-glib-1.0.so.0 - - /usr/lib/liblz4.so.1 - - /usr/lib/liblzma.so.5 - - /usr/lib/libm.so.6 - - /usr/lib/libmount.so.1 - - /usr/lib/libogg.so.0 - - /usr/lib/libopus.so.0 - - /usr/lib/libpango-1.0.so.0 - - /usr/lib/libpangocairo-1.0.so.0 - - /usr/lib/libpangoft2-1.0.so.0 - - /usr/lib/libpcre.so.1 - - /usr/lib/libpixman-1.so.0 - - /usr/lib/libpng16.so.16 - - /usr/lib/libpthread.so.0 - - /usr/lib/libpulse-simple.so.0 - - /usr/lib/libpulse.so.0 - - /usr/lib/libsndfile.so.1 - - /usr/lib/libsqlite3.so.0 - - /usr/lib/libstdc++.so.6 - - /usr/lib/libstemmer.so.0 - - /usr/lib/libsystemd.so.0 - - /usr/lib/libthai.so.0 - - /usr/lib/libtiff.so.5 - - /usr/lib/libtracker-sparql-3.0.so.0 - - /usr/lib/libvorbis.so.0 - - /usr/lib/libvorbisenc.so.2 - - /usr/lib/libwayland-client.so.0 - - /usr/lib/libwayland-cursor.so.0 - - /usr/lib/libwayland-egl.so.1 - - /usr/lib/libxcb-randr.so.0 - - /usr/lib/libxdo.so.3 - - /usr/lib/libxkbcommon.so.0 - - /usr/lib/libxml2.so.2 - - /usr/lib/libz.so.1 - - /usr/lib/libzstd.so.1 - - /usr/lib/locale/locale-archive - - /usr/lib/pulseaudio/libpulsecommon-15.0.so + - /lib/x86_64-linux-gnu/libFLAC.so.8 + - /lib/x86_64-linux-gnu/libX11.so.6 + - /lib/x86_64-linux-gnu/libXau.so.6 + - /lib/x86_64-linux-gnu/libXcomposite.so.1 + - /lib/x86_64-linux-gnu/libXcursor.so.1 + - /lib/x86_64-linux-gnu/libXdamage.so.1 + - /lib/x86_64-linux-gnu/libXdmcp.so.6 + - /lib/x86_64-linux-gnu/libXext.so.6 + - /lib/x86_64-linux-gnu/libXfixes.so.3 + - /lib/x86_64-linux-gnu/libXi.so.6 + - /lib/x86_64-linux-gnu/libXinerama.so.1 + - /lib/x86_64-linux-gnu/libXrandr.so.2 + - /lib/x86_64-linux-gnu/libXrender.so.1 + - /lib/x86_64-linux-gnu/libXtst.so.6 + - /lib/x86_64-linux-gnu/libapparmor.so.1 + - /lib/x86_64-linux-gnu/libasyncns.so.0 + - /lib/x86_64-linux-gnu/libatk-1.0.so.0 + - /lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0 + - /lib/x86_64-linux-gnu/libatspi.so.0 + - /lib/x86_64-linux-gnu/libbsd.so.0 + - /lib/x86_64-linux-gnu/libcairo-gobject.so.2 + - /lib/x86_64-linux-gnu/libcairo.so.2 + - /lib/x86_64-linux-gnu/libdatrie.so.1 + - /lib/x86_64-linux-gnu/libepoxy.so.0 + - /lib/x86_64-linux-gnu/libffi.so.7 + - /lib/x86_64-linux-gnu/libfontconfig.so.1 + - /lib/x86_64-linux-gnu/libfreetype.so.6 + - /lib/x86_64-linux-gnu/libfribidi.so.0 + - /lib/x86_64-linux-gnu/libgcrypt.so.20 + - /lib/x86_64-linux-gnu/libgdk-3.so.0 + - /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 + - /lib/x86_64-linux-gnu/libgio-2.0.so.0 + - /lib/x86_64-linux-gnu/libglib-2.0.so.0 + - /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 + - /lib/x86_64-linux-gnu/libgobject-2.0.so.0 + - /lib/x86_64-linux-gnu/libgraphite2.so.3 + - /lib/x86_64-linux-gnu/libgtk-3.so.0 + - /lib/x86_64-linux-gnu/libharfbuzz.so.0 + - /lib/x86_64-linux-gnu/liblz4.so.1 + - /lib/x86_64-linux-gnu/libogg.so.0 + - /lib/x86_64-linux-gnu/libpango-1.0.so.0 + - /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 + - /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 + - /lib/x86_64-linux-gnu/libpcre2-8.so.0 + - /lib/x86_64-linux-gnu/libpixman-1.so.0 + - /lib/x86_64-linux-gnu/libpng16.so.16 + - /lib/x86_64-linux-gnu/libpulse-simple.so.0 + - /lib/x86_64-linux-gnu/libpulse.so.0 + - /lib/x86_64-linux-gnu/libsndfile.so.1 + - /lib/x86_64-linux-gnu/libthai.so.0 + - /lib/x86_64-linux-gnu/libvorbis.so.0 + - /lib/x86_64-linux-gnu/libvorbisenc.so.2 + - /lib/x86_64-linux-gnu/libwayland-client.so.0 + - /lib/x86_64-linux-gnu/libwayland-cursor.so.0 + - /lib/x86_64-linux-gnu/libwayland-egl.so.1 + - /lib/x86_64-linux-gnu/libwrap.so.0 + - /lib/x86_64-linux-gnu/libxcb-randr.so.0 + - /lib/x86_64-linux-gnu/libxdo.so.3 + - /lib/x86_64-linux-gnu/libxkbcommon.so.0 exclude: - usr/share/man - usr/share/doc/*/README.* - usr/share/doc/*/changelog.* - usr/share/doc/*/NEWS.* - usr/share/doc/*/TODO.* + runtime: + env: + PYTHONHOME: '${APPDIR}/usr' + PYTHONPATH: '${APPDIR}/usr/lib/python3.8/site-packages' test: fedora-30: image: appimagecrafters/tests-env:fedora-30 diff --git a/appimage/README.md b/appimage/README.md new file mode 100644 index 000000000..1dcfa0b35 --- /dev/null +++ b/appimage/README.md @@ -0,0 +1,20 @@ +# How to build and run RustDesk in AppImage + +Begin by installing `appimage-builder` and predependencies mentioned in official website. + +Assume that `appimage-builder` is setup correctly, run commands below, `bash` or `zsh` is recommended: + +```bash +cd /path/to/rustdesk_root +./build_appimage.py +``` + +After a success package, you can see the message in console like: + +```shell +INFO:root:AppImage created successfully +``` + +The AppImage package is shown in `./appimage/RustDesk-VERSION-TARGET_PLATFORM.AppImage`. + +Note: AppImage version of rustdesk is an early version which requires more test. If you find problems, please open an issue. \ No newline at end of file diff --git a/appimage/requirements.txt b/appimage/requirements.txt new file mode 100644 index 000000000..d632797e5 --- /dev/null +++ b/appimage/requirements.txt @@ -0,0 +1 @@ +pynput \ No newline at end of file diff --git a/appimage/AppDir/rustdesk.desktop b/appimage/rustdesk.desktop similarity index 100% rename from appimage/AppDir/rustdesk.desktop rename to appimage/rustdesk.desktop diff --git a/build_appimage.py b/build_appimage.py old mode 100644 new mode 100755 index 2abe221f2..943585359 --- a/build_appimage.py +++ b/build_appimage.py @@ -1,8 +1,11 @@ #!/usr/bin/python3 import os - - if __name__ == '__main__': - - pass \ No newline at end of file + os.chdir("appimage") + ret = os.system("appimage-builder --recipe AppImageBuilder.yml --skip-test") + if ret == 0: + print("RustDesk AppImage build success :)") + print("Check AppImage in '/path/to/rustdesk/appimage/RustDesk-VERSION-TARGET_PLATFORM.AppImage'") + else: + print("RustDesk AppImage build failed :(") diff --git a/libs/enigo/src/linux.rs b/libs/enigo/src/linux.rs index 8881d26d5..adfe9507c 100644 --- a/libs/enigo/src/linux.rs +++ b/libs/enigo/src/linux.rs @@ -491,7 +491,11 @@ fn start_pynput_service(rx: mpsc::Receiver<(PyMsg, bool)>) { if !std::path::Path::new(&py).exists() { py = "/usr/lib/rustdesk/pynput_service.py".to_owned(); if !std::path::Path::new(&py).exists() { - log::error!("{} not exits", py); + // enigo libs, not rustdesk root project, so skip using appimage features + py = std::env::var("APPDIR").unwrap_or("".to_string()) + "/usr/lib/rustdesk/pynput_service.py"; + if !std::path::Path::new(&py).exists() { + log::error!("{} not exists", py); + } } } } diff --git a/src/common.rs b/src/common.rs index 58220a438..972f33500 100644 --- a/src/common.rs +++ b/src/common.rs @@ -377,10 +377,18 @@ pub fn get_time() -> i64 { } pub fn run_me>(args: Vec) -> std::io::Result { - let cmd = std::env::var("APPDIR").unwrap(); - let p = Path::new(&cmd).join("AppRun"); - log::info!("path: {:?}", p); - return std::process::Command::new(p).args(&args).spawn(); + #[cfg(not(feature = "appimage"))] + { + let cmd = std::env::current_exe()?; + return std::process::Command::new(cmd).args(&args).spawn(); + } + #[cfg(feature = "appimage")] + { + let appdir = std::env::var("APPDIR").unwrap(); + let appimage_cmd = Path::new(&appdir).join("AppRun"); + log::info!("path: {:?}", appimage_cmd); + return std::process::Command::new(appimage_cmd).args(&args).spawn(); + } } pub fn username() -> String { diff --git a/src/ui.rs b/src/ui.rs index 5ab028a28..7b953e700 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -57,7 +57,10 @@ pub fn start(args: &mut [String]) { } #[cfg(all(target_os = "linux", feature = "inline"))] { + #[cfg(feature = "appimage")] let prefix = std::env::var("APPDIR").unwrap_or("".to_string()); + #[cfg(not(feature = "appimage"))] + let prefix = "".to_string(); sciter::set_library(&(prefix + "/usr/lib/rustdesk/libsciter-gtk.so")).ok(); } // https://github.com/c-smile/sciter-sdk/blob/master/include/sciter-x-types.h From e4227b219492085a2fe9d78b81de50b40d507706 Mon Sep 17 00:00:00 2001 From: Kingtous Date: Thu, 9 Jun 2022 18:07:15 +0800 Subject: [PATCH 3/3] add: automatic change version for .desktop files --- build_appimage.py | 11 +++++++++++ rustdesk.desktop | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/build_appimage.py b/build_appimage.py index 943585359..a4e1a1cb7 100755 --- a/build_appimage.py +++ b/build_appimage.py @@ -1,8 +1,19 @@ #!/usr/bin/python3 import os +def get_version(): + with open("Cargo.toml") as fh: + for line in fh: + if line.startswith("version"): + return line.replace("version", "").replace("=", "").replace('"', '').strip() + return '' + if __name__ == '__main__': + # check version + version = get_version() os.chdir("appimage") + os.system("sed -i 's/^Version=.*/Version=%s/g' rustdesk.desktop" % version) + # build appimage ret = os.system("appimage-builder --recipe AppImageBuilder.yml --skip-test") if ret == 0: print("RustDesk AppImage build success :)") diff --git a/rustdesk.desktop b/rustdesk.desktop index 8bdbe06e0..11c7daad0 100644 --- a/rustdesk.desktop +++ b/rustdesk.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.0 +Version=1.2.0 Name=RustDesk GenericName=Remote Desktop Comment=Remote Desktop