diff --git a/appimage/AppImageBuilder.yml b/appimage/AppImageBuilder.yml
new file mode 100644
index 000000000..e5e424d0b
--- /dev/null
+++ b/appimage/AppImageBuilder.yml
@@ -0,0 +1,90 @@
+# appimage-builder recipe see https://appimage-builder.readthedocs.io for details
+version: 1
+script:
+ - rm -rf ./AppDir || true
+ - bsdtar -zxvf ../rustdesk-1.2.0.deb
+ - tar -xvf ./data.tar.xz
+ - mkdir ./AppDir
+ - mv ./usr ./AppDir/usr
+ # 32x32 icon
+ - for i in {32,64,128}; do mkdir -p ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/; cp ../res/$i\x$i.png ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/rustdesk.png; done
+ # desktop file
+ # - sed -i "s/Icon=\/usr\/share\/rustdesk\/files\/rustdesk.png/Icon=rustdesk/g" ./AppDir/usr/share/applications/rustdesk.desktop
+ - rm -rf ./AppDir/usr/share/applications
+AppDir:
+  path: ./AppDir
+  app_info:
+    id: rustdesk
+    name: rustdesk
+    icon: rustdesk
+    version: 1.2.0
+    exec: usr/lib/rustdesk/rustdesk
+    exec_args: $@
+  apt:
+    arch:
+    - amd64
+    allow_unauthenticated: true
+    sources:
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic universe
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates universe
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic multiverse
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates multiverse
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted
+        universe multiverse
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security universe
+    - sourceline: deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-security multiverse
+    - sourceline: deb http://ppa.launchpad.net/pipewire-debian/pipewire-upstream/ubuntu
+        bionic main
+    include:
+    - libc6:amd64
+    - libgtk-3-0
+    - libxcb-randr0
+    - libxdo3
+    - libxfixes3
+    - libxcb-shape0
+    - libxcb-xfixes0
+    - libasound2
+    - libsystemd0
+    - curl
+    - libva-drm2
+    - libva-x11-2
+    - libvdpau1
+    - libgstreamer-plugins-base1.0-0
+    exclude:
+    - humanity-icon-theme
+    - hicolor-icon-theme
+    - adwaita-icon-theme
+    - ubuntu-mono
+  files:
+    include: []
+    exclude:
+    - usr/share/man
+    - usr/share/doc/*/README.*
+    - usr/share/doc/*/changelog.*
+    - usr/share/doc/*/NEWS.*
+    - usr/share/doc/*/TODO.*
+  runtime:
+    env:
+      GIO_MODULE_DIR: $APPDIR/usr/lib/x86_64-linux-gnu/gio/modules/
+  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/flutter/linux/my_application.cc b/flutter/linux/my_application.cc
index 215c6f0ee..21e25fa28 100644
--- a/flutter/linux/my_application.cc
+++ b/flutter/linux/my_application.cc
@@ -23,7 +23,15 @@ static void my_application_activate(GApplication* application) {
       GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
   // we have custom window frame
   gtk_window_set_decorated(window, FALSE);
-
+  // try setting icon for rustdesk, which uses the system cache 
+  GtkIconTheme* theme = gtk_icon_theme_get_default();
+  gint icons[4] = {256, 128, 64, 32};
+  for (int i = 0; i < 4; i++) {
+    GdkPixbuf* icon = gtk_icon_theme_load_icon(theme, "rustdesk", icons[i], GTK_ICON_LOOKUP_NO_SVG, NULL);
+    if (icon != nullptr) {
+      gtk_window_set_icon(window, icon);
+    }
+  }
   // Use a header bar when running in GNOME as this is the common style used
   // by applications and is the setup most users will be using (e.g. Ubuntu
   // desktop).