从问题开始:(以 root 身份运行 Electron[或任何基于 Chromium 的应用程序]不是受支持的配置

***:运行 https://releases.lmstudio.ai/linux/x86/0.3.2/1/LM_Studio-0.3.2.AppImage,报错:FATAL:electron_main_delegate.cc(294)] Running as root without --no-sandbox is not supported. See  https://crbug.com/638180.

  • 不支持在没有 --no-sandbox 的情况下以 root 身份运行(是从 Chromium 继承而来的,不是在 Electron 中可以改变的。建议不要以 root 身份运行任何 Electron 应用程序),所以要不加参数--no-sandbox、要不切换普通用户(尝试在没有 sudo 和 --no-sandbox 标志的情况下再次运行应用程序。它很有可能成功找到您的 X11 显示器)。
  • 在基于 Electron 的应用以 AppImage 形式运行时,可能会涉及到对非特权命名空间的使用和配置,以增强应用的安全性、稳定性或实现特定的功能需求)。 AppImage一种自包含的应用程序格式,其运行原理在于将应用程序、依赖库和其它必要文件打包成一个单独的可执行文件。Electron需要kernel允许sandboxing,也即kernel提供“unprivileged namespaces”(非特权命名空间是一种操作系统层面的隔离机制,用于为应用程序提供一定程度的隔离和资源控制)。对于在程序中实现非特权命名空间的设置,通常需要使用系统调用(如 clone() )并指定相应的标志来创建命名空间
sysctl -w kernel.unprivileged_userns_clone = 1
echo kernel.unprivileged_userns_clone = 1 | sudo tee /etc/sysctl.d/00-local-userns.conf  //This command will take effect only on the next reboot
  • 1.
  • 2.
  • 将kernel.unprivileged_userns_clone设置为 1 通常是为了允许非特权用户创建用户命名空间(User Namespace)。默认情况下,在某些 Linux 系统中,只有特权用户(如 root)才能创建用户命名空间,通过将这个选项设置为 1,非特权用户也可以创建用户命名空间
  • AppImage 的原理是使用 squashfs 文件系统将应用程序及其依赖库打包成一个只读的文件系统。这个文件系统可以使用 FUSE(Filesystem in Userspace)挂载到系统中,然后运行应用程序。AppImage 在 Linux 系统中有着广泛的应用。它为用户提供了一种便捷的方式来获取和运行各种应用程序,无需担心不同 Linux 发行版之间的差异和依赖问题。

知识扩展:

  • Electron 几乎是 Web 开发人员开发桌面客户端的唯一途径,很多大厂都使用 Electron 开发自己的原生应用。Electron 天生适配任何前端开发框架
  • Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
  • Chromium的一个关键安全特性是,进程可以在沙盒中执行。 沙盒通过限制对大多数系统资源的访问来减少恶意代码可能造成的伤害 — 沙盒化的进程只能自由使用CPU周期和内存。 为了执行需要额外权限的操作,沙盒处的进程通过专用通信渠道将任务下放给更大权限的进程。
  • 在Chromium中,沙盒化应用于主进程以外的大多数进程。 其中包括渲染器进程,以及功能性进程,如音频服务、GPU 服务和网络服务。In Chromium, sandboxing is applied to most processes other than the main process. This includes renderer processes, as well as utility processes such as the audio service, the GPU service, and the network service.


进程沙盒化|Electron(Electron-based AppImages)_应用程序


  • Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。说白了就是一个沙盒包了一个浏览器,从而实现桌面应用。
  • 由于 Electron 使用 Chromium 来展示页面,所以 Chromium 的多进程结构也被充分利用。每个 Electron 的页面都在运行着自己的进程,这样的进程我们称之为渲染进程
  • 在一般浏览器中,网页通常会在沙盒环境下运行,并且不允许访问原生资源。然而,Electron 用户拥有在网页中调用 io.js 的 APIs 的能力,可以与底层操作系统直接交互。