Cannot even open the RemNote desktop app after downloading/updating to 1.8.19

I’ve upgraded to version 1.8.19 and immediately failed to open the app, and then I’ve tried to reinstall the app, it failed also. I’m using RemNote on Linux. Could anyone help me to solve this problem? thx :frowning:
P.S. There’s no way to downgrade the app to solve this problem which is pretty disappointing to me. Really hope the developers will add this feature
P.S.2 I’ve contacted the RemNote support already but one day is too slow, so I hope someone can solve this problem asap. I will post the solution back here once the support has contacted me back and helped me to solve this issue. Big thx to y’all!!

Blockquote mint@laptop:~/Applications$ ./RemNote-1.8.19.AppImage &
[1] 16553
mint@laptop:~/Applications$ isDev false
Spawn thread
USER_ROOT_PATH /home/mint
mesa: for the --simplifycfg-sink-common option: may only occur zero or one times!
mesa: for the --global-isel-abort option: may only occur zero or one times!
mesa: for the --amdgpu-atomic-optimizations option: may only occur zero or one times!
Create server
SQLite express server listening on port 4200
Sending to main server_started
Got message from child server_started
Server successfully started on 4200
Got port! ----- 4200
connection
getDatabasePath: remnote-search-update-cache
Exiting 1
node:electron/js2c/asar_bundle:5
/*! no static exports found /function(t,e,r){“use strict”;(function(t,n){Object.defineProperty(e,"__esModule",{value:!0}),e.wrapFsWithAsar=void 0;const s=r(/! buffer /“buffer”),i=r(/! path /“path”),a=r(/! util /“util”),o=t._linkedBinding(“electron_common_asar”),c=r(/! module /“module”),f=n.Promise,l=t.env.ELECTRON_NO_ASAR&&“browser”!==t.type&&“renderer”!==t.type,u=t.internalBinding;delete t.internalBinding;const nextTick=(e,r=[])=>{t.nextTick(()=>e(…r))},p=new Map,getOrCreateArchive=t=>{if(p.has(t))return p.get(t);try{const e=new o.Archive(t);return p.set(t,e),e}catch{return null}},h=/.asar/i,splitPath=e=>{if(t.noAsar||l)return{isAsar:!1};let r=e;return s.Buffer.isBuffer(e)&&(r=e.toString()),“string”!=typeof r?{isAsar:!1}:h.test(r)?o.splitPath(i.normalize(r)):{isAsar:!1}};let _=0;const d=null!=t.getuid?t.getuid():0,y=null!=t.getgid?t.getgid():0,P=new Date,asarStatsToFsStats=function(t){const{Stats:e,constants:n}=r(/! fs /“fs”);let s=n.S_IROTH^n.S_IRGRP^n.S_IRUSR^n.S_IWUSR;return t.isFile?s^=n.S_IFREG:t.isDirectory?s^=n.S_IFDIR:t.isLink&&(s^=n.S_IFLNK),new e(1,s,1,d,y,0,void 0,++_,t.size,void 0,P.getTime(),P.getTime(),P.getTime(),P.getTime())},createError=(t,{asarPath:e,filePath:r}={})=>{let n;switch(t){case"NOT_FOUND":n=new Error(ENOENT, ${r} not found in ${e}),n.code=“ENOENT”,n.errno=-2;break;case"NOT_DIR":n=new Error(“ENOTDIR, not a directory”),n.code=“ENOTDIR”,n.errno=-20;break;case"NO_ACCESS":n=new Error(EACCES: permission denied, access '${r}'),n.code=“EACCES”,n.errno=-13;break;case"INVALID_ARCHIVE":n=new Error(Invalid package ${e});break;default:throw new Error(Invalid error type "${t}" passed to createError.)}return n},overrideAPISync=function(t,e,r,n=!1){null==r&&(r=0);const s=t[e],func=function(…t){const e=t[r],n=splitPath(e);if(!n.isAsar)return s.apply(this,t);const{asarPath:i,filePath:a}=n,o=getOrCreateArchive(i);if(!o)throw createError(“INVALID_ARCHIVE”,{asarPath:i});const c=o.copyFileOut(a);if(!c)throw createError(“NOT_FOUND”,{asarPath:i,filePath:a});return t[r]=c,s.apply(this,t)};if(n)return func;t[e]=func},overrideAPI=function(t,e,r){null==r&&(r=0);const n=t[e];t[e]=function(…s){const i=s[r],a=splitPath(i);if(!a.isAsar)return n.apply(this,s);const{asarPath:o,filePath:c}=a,f=s[s.length-1];if(“function”!=typeof f)return overrideAPISync(t,e,r,!0).apply(this,s);const l=getOrCreateArchive(o);if(!l){const t=createError(“INVALID_ARCHIVE”,{asarPath:o});return void nextTick(f,[t])}const u=l.copyFileOut(c);if(u)return s[r]=u,n.apply(this,s);{const t=createError(“NOT_FOUND”,{asarPath:o,filePath:c});nextTick(f,[t])}},n[a.promisify.custom]&&(t[e][a.promisify.custom]=makePromiseFunction(n[a.promisify.custom],r)),t.promises&&t.promises[e]&&(t.promises[e]=makePromiseFunction(t.promises[e],r))};let A;function validateBufferIntegrity(e,n){if(!n)return;A=A||r(/! crypto /“crypto”);const s=A.createHash(n.algorithm).update(e).digest(“hex”);s!==n.hash&&(console.error(ASAR Integrity Violation: got a hash mismatch (${s} vs ${n.hash})),t.exit(1))}const makePromiseFunction=function(t,e){return function(…r){const n=r[e],s=splitPath(n);if(!s.isAsar)return t.apply(this,r);const{asarPath:i,filePath:a}=s,o=getOrCreateArchive(i);if(!o)return f.reject(createError(“INVALID_ARCHIVE”,{asarPath:i}));const c=o.copyFileOut(a);return c?(r[e]=c,t.apply(this,r)):f.reject(createError(“NOT_FOUND”,{asarPath:i,filePath:a}))}};e.wrapFsWithAsar=e=>{const n=new Map,logASARAccess=(s,i,a)=>{if(t.env.ELECTRON_LOG_ASAR_READS){if(!n.has(s)){const t=r(/! path /“path”),i=${t.basename(s,".asar")}-access-log.txt,a=t.join(r(/! os /“os”).tmpdir(),i);n.set(s,e.openSync(a,“a”))}e.writeSync(n.get(s),${a}: ${i}\n)}},{lstatSync:o}=e;e.lstatSync=(t,e)=>{const r=splitPath(t);if(!r.isAsar)return o(t,e);const{asarPath:n,filePath:s}=r,i=getOrCreateArchive(n);if(!i)throw createError(“INVALID_ARCHIVE”,{asarPath:n});const a=i.stat(s);if(!a)throw createError(“NOT_FOUND”,{asarPath:n,filePath:s});return asarStatsToFsStats(a)};const{lstat:l}=e;e.lstat=function(t,e,r){const n=splitPath(t);if(“function”==typeof e&&(r=e,e={}),!n.isAsar)return l(t,e,r);const{asarPath:s,filePath:i}=n,a=getOrCreateArchive(s);if(!a){const t=createError(“INVALID_ARCHIVE”,{asarPath:s});return void nextTick(r,[t])}const o=a.stat(i);if(!o){const t=createError(“NOT_FOUND”,{asarPath:s,filePath:i});return void nextTick(r,[t])}const c=asarStatsToFsStats(o);nextTick(r,[null,c])},e.promises.lstat=a.promisify(e.lstat);const{statSync:p}=e;e.statSync=(t,r)=>{const{isAsar:n}=splitPath(t);return n?e.lstatSync(t,r):p(t,r)};const{stat:h}=e;e.stat=(r,n,s)=>{const{isAsar:i}=splitPath(r);if(“function”==typeof n&&(s=n,n={}),!i)return h(r,n,s);t.nextTick(()=>e.lstat(r,n,s))},e.promises.stat=a.promisify(e.stat);const wrapRealpathSync=function(t){return function(e,r){const n=splitPath(e);if(!n.isAsar)return t.apply(this,arguments);const{asarPath:s,filePath:a}=n,o=getOrCreateArchive(s);if(!o)throw createError(“INVALID_ARCHIVE”,{asarPath:s});const c=o.realpath(a);if(!1===c)throw createError(“NOT_FOUND”,{asarPath:s,filePath:a});return i.join(t(s,r),c)}},{realpathSync:}=e;e.realpathSync=wrapRealpathSync(),e.realpathSync.native=wrapRealpathSync(_.native);const wrapRealpath=function(t){return function(e,r,n){const s=splitPath(e);if(!s.isAsar)return t.apply(this,arguments);const{asarPath:a,filePath:o}=s;arguments.length<3&&(n=r,r={});const c=getOrCreateArchive(a);if(!c){const t=createError(“INVALID_ARCHIVE”,{asarPath:a});return void nextTick(n,[t])}const f=c.realpath(o);if(!1!==f)t(a,r,(t,e)=>{if(null===t){const t=i.join(e,f);n(null,t)}else n(t)});else{const t=createError(“NOT_FOUND”,{asarPath:a,filePath:o});nextTick(n,[t])}}},{realpath:d}=e;e.realpath=wrapRealpath(d),e.realpath.native=wrapRealpath(d.native),e.promises.realpath=a.promisify(e.realpath.native);const{exists:y}=e;e.exists=(t,e)=>{const r=splitPath(t);if(!r.isAsar)return y(t,e);const{asarPath:n,filePath:s}=r,i=getOrCreateArchive(n);if(!i){const t=createError(“INVALID_ARCHIVE”,{asarPath:n});return void nextTick(e,[t])}const a=!1!==i.stat(s);nextTick(e,[a])},e.exists[a.promisify.custom]=t=>{const e=splitPath(t);if(!e.isAsar)return ya.promisify.custom;const{asarPath:r,filePath:n}=e,s=getOrCreateArchive(r);if(!s){const t=createError(“INVALID_ARCHIVE”,{asarPath:r});return f.reject(t)}return f.resolve(!1!==s.stat(n))};const{existsSync:P}=e;e.existsSync=t=>{const e=splitPath(t);if(!e.isAsar)return P(t);const{asarPath:r,filePath:n}=e,s=getOrCreateArchive(r);return!!s&&!1!==s.stat(n)};const{access:A}=e;e.access=function(t,r,n){const s=splitPath(t);if(!s.isAsar)return A.apply(this,arguments);const{asarPath:i,filePath:a}=s;“function”==typeof r&&(n=r,r=e.constants.F_OK);const o=getOrCreateArchive(i);if(!o){const t=createError(“INVALID_ARCHIVE”,{asarPath:i});return void nextTick(n,[t])}const c=o.getFileInfo(a);if(!c){const t=createError(“NOT_FOUND”,{asarPath:i,filePath:a});return void nextTick(n,[t])}if(c.unpacked){const t=o.copyFileOut(a);return e.access(t,r,n)}const f=o.stat(a);if(f)if(r&e.constants.W_OK){const t=createError(“NO_ACCESS”,{asarPath:i,filePath:a});nextTick(n,[t])}else nextTick(n);else{const t=createError(“NOT_FOUND”,{asarPath:i,filePath:a});nextTick(n,[t])}},e.promises.access=a.promisify(e.access);const{accessSync:I}=e;function fsReadFileAsar(t,r,n){const i=splitPath(t);if(i.isAsar){const{asarPath:t,filePath:a}=i;if(“function”==typeof r)n=r,r={encoding:null};else if(“string”==typeof r)r={encoding:r};else if(null==r)r={encoding:null};else if(“object”!=typeof r)throw new TypeError(“Bad arguments”);const{encoding:o}=r,c=getOrCreateArchive(t);if(!c){const e=createError(“INVALID_ARCHIVE”,{asarPath:t});return void nextTick(n,[e])}const f=c.getFileInfo(a);if(!f){const e=createError(“NOT_FOUND”,{asarPath:t,filePath:a});return void nextTick(n,[e])}if(0===f.size)return void nextTick(n,[null,o?"":s.Buffer.alloc(0)]);if(f.unpacked){const t=c.copyFileOut(a);return e.readFile(t,r,n)}const l=s.Buffer.alloc(f.size),u=c.getFdAndValidateIntegrityLater();if(!(u>=0)){const e=createError(“NOT_FOUND”,{asarPath:t,filePath:a});return void nextTick(n,[e])}logASARAccess(t,a,f.offset),e.read(u,l,0,f.size,f.offset,t=>{validateBufferIntegrity(l,f.integrity),n(t,o?l.toString(o):l)})}}e.accessSync=function(t,r){const n=splitPath(t);if(!n.isAsar)return I.apply(this,arguments);const{asarPath:s,filePath:i}=n;null==r&&(r=e.constants.F_OK);const a=getOrCreateArchive(s);if(!a)throw createError(“INVALID_ARCHIVE”,{asarPath:s});const o=a.getFileInfo(i);if(!o)throw createError(“NOT_FOUND”,{asarPath:s,filePath:i});if(o.unpacked){const t=a.copyFileOut(i);return e.accessSync(t,r)}const c=a.stat(i);if(!c)throw createError(“NOT_FOUND”,{asarPath:s,filePath:i});if(r&e.constants.W_OK)throw createError(“NO_ACCESS”,{asarPath:s,filePath:i})};const{readFile:N}=e;e.readFile=function(t,e,r){const n=splitPath(t);return n.isAsar?fsReadFileAsar(t,e,r):N.apply(this,arguments)};const{readFile:O}=e.promises;e.promises.readFile=function(t,e){const r=splitPath(t);if(!r.isAsar)return O.apply(this,arguments);const n=a.promisify(fsReadFileAsar);return n(t,e)};const{readFileSync:g}=e;e.readFileSync=function(t,r){const n=splitPath(t);if(!n.isAsar)return g.apply(this,arguments);const{asarPath:i,filePath:a}=n,o=getOrCreateArchive(i);if(!o)throw createError(“INVALID_ARCHIVE”,{asarPath:i});const c=o.getFileInfo(a);if(!c)throw createError(“NOT_FOUND”,{asarPath:i,filePath:a});if(0===c.size)return r?"":s.Buffer.alloc(0);if(c.unpacked){const t=o.copyFileOut(a);return e.readFileSync(t,r)}if(r){if(“string”==typeof r)r={encoding:r};else if(“object”!=typeof r)throw new TypeError(“Bad arguments”)}else r={encoding:null};const{encoding:f}=r,l=s.Buffer.alloc(c.size),u=o.getFdAndValidateIntegrityLater();if(!(u>=0))throw createError(“NOT_FOUND”,{asarPath:i,filePath:a});return logASARAccess(i,a,c.offset),e.readSync(u,l,0,c.size,c.offset),validateBufferIntegrity(l,c.integrity),f?l.toString(f):l};const{readdir:w}=e;e.readdir=function(t,r={},n){const s=splitPath(t);if(“function”==typeof r&&(n=r,r={}),!s.isAsar)return w.apply(this,arguments);const{asarPath:a,filePath:o}=s,c=getOrCreateArchive(a);if(!c){const t=createError(“INVALID_ARCHIVE”,{asarPath:a});return void nextTick(n,[t])}const f=c.readdir(o);if(f)if(r.withFileTypes){const t=[];for(const r of f){const s=i.join(o,r),f=c.stat(s);if(!f){const t=createError(“NOT_FOUND”,{asarPath:a,filePath:s});return void nextTick(n,[t])}f.isFile?t.push(new e.Dirent(r,e.constants.UV_DIRENT_FILE)):f.isDirectory?t.push(new e.Dirent(r,e.constants.UV_DIRENT_DIR)):f.isLink&&t.push(new e.Dirent(r,e.constants.UV_DIRENT_LINK))}nextTick(n,[null,t])}else nextTick(n,[null,f]);else{const t=createError(“NOT_FOUND”,{asarPath:a,filePath:o});nextTick(n,[t])}},e.promises.readdir=a.promisify(e.readdir);const{readdirSync:m}=e;e.readdirSync=function(t,r){const n=splitPath(t);if(!n.isAsar)return m.apply(this,arguments);const{asarPath:s,filePath:a}=n,o=getOrCreateArchive(s);if(!o)throw createError(“INVALID_ARCHIVE”,{asarPath:s});const c=o.readdir(a);if(!c)throw createError(“NOT_FOUND”,{asarPath:s,filePath:a});if(r&&r.withFileTypes){const t=[];for(const r of c){const n=i.join(a,r),c=o.stat(n);if(!c)throw createError(“NOT_FOUND”,{asarPath:s,filePath:n});c.isFile?t.push(new e.Dirent(r,e.constants.UV_DIRENT_FILE)):c.isDirectory?t.push(new e.Dirent(r,e.constants.UV_DIRENT_DIR)):c.isLink&&t.push(new e.Dirent(r,e.constants.UV_DIRENT_LINK))}return t}return c};const{internalModuleReadJSON:F}=u(“fs”);u(“fs”).internalModuleReadJSON=t=>{const r=splitPath(t);if(!r.isAsar)return F(t);const{asarPath:n,filePath:i}=r,a=getOrCreateArchive(n);if(!a)return[];const o=a.getFileInfo(i);if(!o)return[];if(0===o.size)return["",!1];if(o.unpacked){const t=a.copyFileOut(i),r=e.readFileSync(t,{encoding:“utf8”});return[r,r.length>0]}const c=s.Buffer.alloc(o.size),f=a.getFdAndValidateIntegrityLater();if(!(f>=0))return[];logASARAccess(n,i,o.offset),e.readSync(f,c,0,o.size,o.offset),validateBufferIntegrity(c,o.integrity);const l=c.toString(“utf8”);return[l,l.length>0]};const{internalModuleStat:S}=u(“fs”);if(u(“fs”).internalModuleStat=t=>{const e=splitPath(t);if(!e.isAsar)return S(t);const{asarPath:r,filePath:n}=e,s=getOrCreateArchive(r);if(!s)return-34;const i=s.stat(n);return i?i.isDirectory?1:0:-34},“win32”===t.platform){const{mkdir:t}=e;e.mkdir=(e,r,n)=>{“function”==typeof r&&(n=r,r={});const s=splitPath(e);if(s.isAsar&&s.filePath.length>0){const t=createError(“NOT_DIR”);nextTick(n,[t])}else t(e,r,n)},e.promises.mkdir=a.promisify(e.mkdir);const{mkdirSync:r}=e;e.mkdirSync=function(t,e){const n=splitPath(t);if(n.isAsar&&n.filePath.length)throw createError(“NOT_DIR”);return r(t,e)}}function invokeWithNoAsar(e){return function(){const r=t.noAsar;t.noAsar=!0;try{return e.apply(this,arguments)}finally{t.noAsar=r}}}overrideAPI(e,“copyFile”),overrideAPISync(e,“copyFileSync”),overrideAPI(e,“open”),overrideAPISync(t,“dlopen”,1),overrideAPISync(c._extensions,".node",1),overrideAPISync(e,“openSync”);const overrideChildProcess=t=>{const{exec:e,execSync:r}=t;t.exec=invokeWithNoAsar(e),t.exec[a.promisify.custom]=invokeWithNoAsar(e[a.promisify.custom]),t.execSync=invokeWithNoAsar(r),overrideAPI(t,“execFile”),overrideAPISync(t,“execFileSync”)},D=new WeakSet;if(t.env.ELECTRON_EAGER_ASAR_HOOK_FOR_TESTING)overrideChildProcess(r(/! child_process /“child_process”));else{const t=c._load;c._load=(e,…r)=>{const n=t(e,…r);if(“child_process”===e&&!D.has(n)){D.add(n),overrideChildProcess(n)}return n}}}}).call(this,r(/! @electron/internal/common/webpack-provider /"./lib/common/webpack-provider.ts").process,r(/! @electron/internal/common/webpack-provider */"./lib/common/webpack-provider.ts")._global)},"./lib/asar/init.ts":

Error: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33’ not found (required by /tmp/.org.chromium.Chromium.s4yO3b)
at process.func [as dlopen] (node:electron/js2c/asar_bundle:5:1812)
at Module._extensions…node (node:internal/modules/cjs/loader:1203:18)
at Object.func [as .node] (node:electron/js2c/asar_bundle:5:2039)
at Module.load (node:internal/modules/cjs/loader:988:32)
at Module._load (node:internal/modules/cjs/loader:829:12)
at c._load (node:electron/js2c/asar_bundle:5:13343)
at Module.require (node:internal/modules/cjs/loader:1012:19)
at require (node:internal/modules/cjs/helpers:102:18)
at bindings (/tmp/.mount_RemNotmgQKfQ/resources/app.asar/node_modules/bindings/bindings.js:112:48)
at new Database (/tmp/.mount_RemNotmgQKfQ/resources/app.asar/node_modules/better-sqlite3/lib/database.js:48:64) {
code: ‘ERR_DLOPEN_FAILED’
}

New users can only add one image only
So I add the rest of them here

continue…


Done! That’s all

Literally no one will be better able to help you than the support team you’ve already contacted, as no one else can request access to your KB/account.