diff --git a/PKGBUILD b/PKGBUILD index 0d67a28b6..6fb65d48b 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,5 +1,5 @@ pkgname=rustdesk -pkgver=1.1.9 +pkgver=1.1.10 pkgrel=0 epoch= pkgdesc="" @@ -27,5 +27,5 @@ package() { install -Dm 644 $HBB/rustdesk.service -t "${pkgdir}/usr/share/rustdesk/files" install -Dm 644 $HBB/rustdesk.desktop -t "${pkgdir}/usr/share/rustdesk/files" install -Dm 644 $HBB/pynput_service.py -t "${pkgdir}/usr/share/rustdesk/files" - install -Dm 644 $HBB/256-no-margin.png "${pkgdir}/usr/share/rustdesk/files/rustdesk.png" + install -Dm 644 $HBB/128x128@2x.png "${pkgdir}/usr/share/rustdesk/files/rustdesk.png" } diff --git a/build.py b/build.py index 341f4f4e6..6b03cb57b 100755 --- a/build.py +++ b/build.py @@ -66,6 +66,8 @@ def make_parser(): default='', help='Integrate features, windows only.' 'Available: IddDriver, PrivacyMode. Special value is "ALL" and empty "". Default is empty.') + parser.add_argument('--flutter', action='store_true', + help='Build flutter package', default=False) parser.add_argument( '--hwcodec', action='store_true', @@ -114,9 +116,58 @@ def get_features(args): features.extend(get_rc_features(args)) if args.hwcodec: features.append('hwcodec') + if args.flutter: + features.append('flutter') print("features:", features) return features + +def build_flutter_deb(version): + os.chdir('flutter') + os.system('dpkg-deb -R rustdesk.deb tmpdeb') + # os.system('flutter build linux --release') + os.system('rm tmpdeb/usr/bin/rustdesk') + os.system('strip build/linux/x64/release/liblibrustdesk.so') + os.system('mkdir -p tmpdeb/usr/lib/rustdesk') + os.system('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/') + os.system( + 'cp -r build/linux/x64/release/bundle/* tmpdeb/usr/lib/rustdesk/') + os.system( + 'pushd tmpdeb && ln -s /usr/lib/rustdesk/flutter_hbb usr/bin/rustdesk && popd') + os.system( + 'cp build/linux/x64/release/liblibrustdesk.so tmpdeb/usr/lib/rustdesk/librustdesk.so') + os.system( + 'cp rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') + os.system( + 'cp rustdesk.service.user tmpdeb/usr/share/rustdesk/files/systemd/') + os.system( + 'cp ../pynput_service.py tmpdeb/usr/share/rustdesk/files/') + os.system( + 'cp ../128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png') + os.system( + 'cp rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') + os.system('mkdir -p tmpdeb/DEBIAN') + os.system('cp -a ../DEBIAN/* tmpdeb/DEBIAN/') + md5_file('usr/share/rustdesk/files/systemd/rustdesk.service') + md5_file('usr/share/rustdesk/files/systemd/rustdesk.service.user') + md5_file('usr/share/rustdesk/files/pynput_service.py') + os.system('dpkg-deb -b tmpdeb rustdesk.deb; /bin/rm -rf tmpdeb/') + os.rename('rustdesk.deb', '../rustdesk-%s.deb' % version) + os.chdir("..") + + +def build_flutter_arch_manjaro(version): + os.chdir('flutter') + os.system('flutter build linux --release') + os.system('strip build/linux/x64/release/liblibrustdesk.so') + os.system("sed -i 's/pkgver=.*/pkgver=%s/g' PKGBUILD" % version) + # pacman -S -needed base-devel + os.system('HBB=`pwd` makepkg -f') + os.system( + 'mv rustdesk-%s-0-x86_64.pkg.tar.zst ../rustdesk-%s-manjaro-arch.pkg.tar.zst' % (version, version)) + os.chdir('..') + + def main(): parser = make_parser() args = parser.parse_args() @@ -135,6 +186,7 @@ def main(): os.system('git checkout src/ui/common.tis') version = get_version() features = ",".join(get_features(args)) + flutter = args.flutter if windows: os.system('cargo build --release --features ' + features) # os.system('upx.exe target/release/rustdesk.exe') @@ -146,15 +198,19 @@ def main(): else: print('Not signed') os.system(f'cp -rf target/release/RustDesk.exe rustdesk-{version}-setdown.exe') - elif os.path.isfile('/usr/bin/pacman'): - os.system('cargo build --release --features ' + features) - os.system('git checkout src/ui/common.tis') - os.system('strip target/release/rustdesk') - os.system("sed -i 's/pkgver=.*/pkgver=%s/g' PKGBUILD" % version) - # pacman -S -needed base-devel - os.system('HBB=`pwd` makepkg -f') - os.system('mv rustdesk-%s-0-x86_64.pkg.tar.zst rustdesk-%s-manjaro-arch.pkg.tar.zst' % (version, version)) - # pacman -U ./rustdesk.pkg.tar.zst + elif os.path.isfile('/usr/bin/pacman1'): + if flutter: + build_flutter_arch_manjaro(version) + else: + # os.system('cargo build --release --features ' + features) + os.system('git checkout src/ui/common.tis') + os.system('strip target/release/rustdesk') + os.system("sed -i 's/pkgver=.*/pkgver=%s/g' PKGBUILD" % version) + # pacman -S -needed base-devel + os.system('HBB=`pwd` makepkg -f') + os.system( + 'mv rustdesk-%s-0-x86_64.pkg.tar.zst rustdesk-%s-manjaro-arch.pkg.tar.zst' % (version, version)) + # pacman -U ./rustdesk.pkg.tar.zst elif os.path.isfile('/usr/bin/yum'): os.system('cargo build --release --features ' + features) os.system('strip target/release/rustdesk') @@ -172,62 +228,75 @@ def main(): # yum localinstall rustdesk.rpm else: os.system('cargo bundle --release --features ' + features) - if osx: - os.system( - 'strip target/release/bundle/osx/RustDesk.app/Contents/MacOS/rustdesk') - os.system( - 'cp libsciter.dylib target/release/bundle/osx/RustDesk.app/Contents/MacOS/') - # https://github.com/sindresorhus/create-dmg - os.system('/bin/rm -rf *.dmg') - plist = "target/release/bundle/osx/RustDesk.app/Contents/Info.plist" - txt = open(plist).read() - with open(plist, "wt") as fh: - fh.write(txt.replace("", """ - LSUIElement - 1 -""")) - pa = os.environ.get('P') - if pa: - os.system(''' -# buggy: rcodesign sign ... path/*, have to sign one by one -#rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/rustdesk -#rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/libsciter.dylib -#rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./target/release/bundle/osx/RustDesk.app -# goto "Keychain Access" -> "My Certificates" for below id which starts with "Developer ID Application:" -codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/* -codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app -'''.format(pa)) - os.system('create-dmg target/release/bundle/osx/RustDesk.app') - os.rename('RustDesk %s.dmg' % version, 'rustdesk-%s.dmg' % version) - if pa: - os.system(''' -#rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./rustdesk-{1}.dmg -codesign -s "Developer ID Application: {0}" --force --options runtime ./rustdesk-{1}.dmg -# https://pyoxidizer.readthedocs.io/en/latest/apple_codesign_rcodesign.html -rcodesign notarize --api-issuer 69a6de7d-2907-47e3-e053-5b8c7c11a4d1 --api-key 9JBRHG3JHT --staple ./rustdesk-{1}.dmg -# verify: spctl -a -t exec -v /Applications/RustDesk.app -'''.format(pa, version)) + if flutter: + if osx: + # todo: OSX build + pass else: - print('Not signed') + os.system( + 'mv target/release/bundle/deb/rustdesk*.deb ./flutter/rustdesk.deb') + build_flutter_deb(version) else: - os.system('mv target/release/bundle/deb/rustdesk*.deb ./rustdesk.deb') - os.system('dpkg-deb -R rustdesk.deb tmpdeb') - os.system('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/') - os.system( - 'cp rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') - os.system( - 'cp rustdesk.service.user tmpdeb/usr/share/rustdesk/files/systemd/') - os.system('cp pynput_service.py tmpdeb/usr/share/rustdesk/files/') - os.system('cp -a DEBIAN/* tmpdeb/DEBIAN/') - os.system('strip tmpdeb/usr/bin/rustdesk') - os.system('mkdir -p tmpdeb/usr/lib/rustdesk') - os.system('cp libsciter-gtk.so tmpdeb/usr/lib/rustdesk/') - md5_file('usr/share/rustdesk/files/systemd/rustdesk.service') - md5_file('usr/share/rustdesk/files/systemd/rustdesk.service.user') - md5_file('usr/share/rustdesk/files/pynput_service.py') - md5_file('usr/lib/rustdesk/libsciter-gtk.so') - os.system('dpkg-deb -b tmpdeb rustdesk.deb; /bin/rm -rf tmpdeb/') - os.rename('rustdesk.deb', 'rustdesk-%s.deb' % version) + if osx: + os.system( + 'strip target/release/bundle/osx/RustDesk.app/Contents/MacOS/rustdesk') + os.system( + 'cp libsciter.dylib target/release/bundle/osx/RustDesk.app/Contents/MacOS/') + # https://github.com/sindresorhus/create-dmg + os.system('/bin/rm -rf *.dmg') + plist = "target/release/bundle/osx/RustDesk.app/Contents/Info.plist" + txt = open(plist).read() + with open(plist, "wt") as fh: + fh.write(txt.replace("", """ + LSUIElement + 1 + """)) + pa = os.environ.get('P') + if pa: + os.system(''' + # buggy: rcodesign sign ... path/*, have to sign one by one + #rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/rustdesk + #rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/libsciter.dylib + #rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./target/release/bundle/osx/RustDesk.app + # goto "Keychain Access" -> "My Certificates" for below id which starts with "Developer ID Application:" + codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/* + codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app + '''.format(pa)) + os.system('create-dmg target/release/bundle/osx/RustDesk.app') + os.rename('RustDesk %s.dmg' % + version, 'rustdesk-%s.dmg' % version) + if pa: + os.system(''' + #rcodesign sign --p12-file ~/.p12/rustdesk-developer-id.p12 --p12-password-file ~/.p12/.cert-pass --code-signature-flags runtime ./rustdesk-{1}.dmg + codesign -s "Developer ID Application: {0}" --force --options runtime ./rustdesk-{1}.dmg + # https://pyoxidizer.readthedocs.io/en/latest/apple_codesign_rcodesign.html + rcodesign notarize --api-issuer 69a6de7d-2907-47e3-e053-5b8c7c11a4d1 --api-key 9JBRHG3JHT --staple ./rustdesk-{1}.dmg + # verify: spctl -a -t exec -v /Applications/RustDesk.app + '''.format(pa, version)) + else: + print('Not signed') + else: + # buid deb package + os.system( + 'mv target/release/bundle/deb/rustdesk*.deb ./rustdesk.deb') + os.system('dpkg-deb -R rustdesk.deb tmpdeb') + os.system('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/') + os.system( + 'cp rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') + os.system( + 'cp rustdesk.service.user tmpdeb/usr/share/rustdesk/files/systemd/') + os.system( + 'cp pynput_service.py tmpdeb/usr/share/rustdesk/files/') + os.system('cp -a DEBIAN/* tmpdeb/DEBIAN/') + os.system('strip tmpdeb/usr/bin/rustdesk') + os.system('mkdir -p tmpdeb/usr/lib/rustdesk') + os.system('cp libsciter-gtk.so tmpdeb/usr/lib/rustdesk/') + md5_file('usr/share/rustdesk/files/systemd/rustdesk.service') + md5_file('usr/share/rustdesk/files/systemd/rustdesk.service.user') + md5_file('usr/share/rustdesk/files/pynput_service.py') + md5_file('usr/lib/rustdesk/libsciter-gtk.so') + os.system('dpkg-deb -b tmpdeb rustdesk.deb; /bin/rm -rf tmpdeb/') + os.rename('rustdesk.deb', 'rustdesk-%s.deb' % version) os.system("mv Cargo.toml.bk Cargo.toml") os.system("mv src/main.rs.bk src/main.rs") diff --git a/flutter/rustdesk.desktop b/flutter/rustdesk.desktop new file mode 100644 index 000000000..c94285bbd --- /dev/null +++ b/flutter/rustdesk.desktop @@ -0,0 +1,19 @@ +[Desktop Entry] +Version=1.1.10 +Name=RustDesk +GenericName=Remote Desktop +Comment=Remote Desktop +Exec=/usr/lib/rustdesk/flutter_hbb %u +Icon=/usr/share/rustdesk/files/rustdesk.png +Terminal=false +Type=Application +StartupNotify=true +Categories=Network;RemoteAccess;GTK; +Keywords=internet; +Actions=new-window; + +X-Desktop-File-Install-Version=0.23 + +[Desktop Action new-window] +Name=Open a New Window + diff --git a/flutter/rustdesk.service b/flutter/rustdesk.service new file mode 100644 index 000000000..422d9e387 --- /dev/null +++ b/flutter/rustdesk.service @@ -0,0 +1,16 @@ +[Unit] +Description=RustDesk +Requires=network.target +After=systemd-user-sessions.service + +[Service] +Type=simple +ExecStart=/usr/lib/rustdesk/flutter_hbb --service +PIDFile=/run/rustdesk.pid +KillMode=mixed +TimeoutStopSec=30 +User=root +LimitNOFILE=100000 + +[Install] +WantedBy=multi-user.target diff --git a/rpm-suse.spec b/rpm-suse.spec index 16c81ae90..73a610c11 100644 --- a/rpm-suse.spec +++ b/rpm-suse.spec @@ -23,7 +23,7 @@ mkdir -p %{buildroot}/usr/share/rustdesk/files/ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ -install $HBB/256-no-margin.png %{buildroot}/usr/share/rustdesk/files/rustdesk.png +install $HBB/128x128@2x.png %{buildroot}/usr/share/rustdesk/files/rustdesk.png install $HBB/rustdesk.desktop %{buildroot}/usr/share/rustdesk/files/ install $HBB/pynput_service.py %{buildroot}/usr/share/rustdesk/files/ diff --git a/rpm.spec b/rpm.spec index 707f0381a..c61db5d0b 100644 --- a/rpm.spec +++ b/rpm.spec @@ -23,7 +23,7 @@ mkdir -p %{buildroot}/usr/share/rustdesk/files/ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ -install $HBB/256-no-margin.png %{buildroot}/usr/share/rustdesk/files/rustdesk.png +install $HBB/128x128@2x.png %{buildroot}/usr/share/rustdesk/files/rustdesk.png install $HBB/rustdesk.desktop %{buildroot}/usr/share/rustdesk/files/ install $HBB/pynput_service.py %{buildroot}/usr/share/rustdesk/files/ diff --git a/src/core_main.rs b/src/core_main.rs index 2603e000e..c780a1cb0 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -19,6 +19,10 @@ pub fn core_main() -> bool { start_os_service(); return false; } + if args[1] == "--server" { + // TODO: server + return false; + } } true }