不能 Select JDK 的主目录,因为 IntelliJ 看不到它?

Can't Select Home Directory for JDK because IntelliJ can't see it?

我的系统是 Linux Mint 18.3 Cinnamon 64 位。

我已经使用软件管理器安装了 IntelliJ-IDEA 和 Default-jdk (openjdk-8-jdk)。

在使用文件管理器 (Nemo) 或终端浏览时,我可以在 /usr/lib/jvm/java-1.8.0-openjdk-amd64/etc/java-8-openjdk 下看到我认为是 JDK 的文件夹。但这并不重要,因为 IntelliJ 无论如何都看不到任何一个文件夹。事实上,当尝试 Select JDK 的主目录时,IntelliJ 似乎只能看到 [=14] 下的 14 个子文件夹(数百个) =].

甚至不确定如何使用 sudo 从命令行启动 IDEA,例如测试该问题是否与权限相关,因为它显然是通过 flatpak 替代启动的。

看起来应该很简单。我不确定我做错了什么。

您可以尝试从 here 安装 IntelliJ IDEA,看看效果是否更好。 .tar.gz 分发可以使用 ./idea.sh 启动。请注意,您还可以使用 Tools>Create Command-line Launcher 创建启动器脚本。这应该适用于任何版本。

我在 Fedora 29 上安装了带有 Flatpak 的 IntelliJ 时遇到了同样的问题。我相信(但如果我错了请纠正我)Linux Mint 的软件管理器也使用 flatpak。

由于 Flatpak 沙箱应用程序的方式,事实证明这是 "it's a feature not a bug" 情况之一。根据 http://docs.flatpak.org/en/latest/sandbox-permissions.html 处的文档:

Sandbox Permissions One of Flatpak’s main goals is to increase the security of desktop systems by isolating applications from one another. This is achieved using sandboxing and means that, by default, applications that are run with Flatpak have extremely limited access to the host environment. This includes:

No access to any host files except the runtime, the app and ~/.var/app/$APPID. Only the last of these is writable. No access to the network. No access to any device nodes (apart from /dev/null, etc). No access to processes outside the sandbox. Limited syscalls. For instance, apps can’t use nonstandard network socket types or ptrace other processes. Limited access to the session D-Bus instance - an app can only own its own name on the bus. No access to host services like X11, system D-Bus, or PulseAudio. Most applications will need access to some of these resources in order to be useful. This is primarily done during the finishing build stage, which can be configured through the finish-args section of the manifest file (see Manifests).

解决此问题的一种方法是也使用 flatpak 安装 JDK 版本,例如。

flatpak install flathub org.freedesktop.Sdk.Extension.openjdk9 org.freedesktop.Sdk.Extension.openjdk10 org.freedesktop.Sdk.Extension.openjdk11

另一种解决方法是 CrazyCoder 提供的解决方案,即使用他们的 tar.gz 安装 IntelliJ。这完全消除了整个沙箱约束。

正如其他人所说 - 沙盒是一项功能,而不是错误。

我认为@Kevin Dubois 的回答在适用的情况下应该是首选(通过 flatpak 安装你想分享的东西),但如果你想继续使用这个问题还有另一种解决方案flatpak

如何在 flatpak 中找到 /etc/usr 路径:

如文档 this 部分末尾所述:

  • /etc 安装在 /var/run/host/etc 用于 flatpakked 软件
  • /usr 安装在 /var/run/host/usr 用于 flatpakked 软件

如果您需要查找或管理其他路径:

注意: 给软件尽可能少的额外访问通常是个好主意。这就是为什么在授予对路径的访问权限时最好使用 optional :ro 后缀以使其在 read-only 中可访问。 如果某些软件滥用它对您设备的访问权限,您也将承担部分责任。

filesystem permissions reference and a lot of additional information about filesystem permissions here.

中有一些有用的路径变量

GUI 选项:

Flatseal 看起来很整洁。

CLI 选项:

以下示例用于管理 flatpak 应用 com.jetbrains.IntelliJ-IDEA-Community 的路径 /var/lib/gems

检查当前权限:

flatpak info --show-permissions com.jetbrains.IntelliJ-IDEA-Community

授予访问权限:

sudo flatpak override --filesystem="/var/lib/gems":ro com.jetbrains.IntelliJ-IDEA-Community

禁止访问:

sudo flatpak override --nofilesystem="/var/lib/gems" com.jetbrains.IntelliJ-IDEA-Community

要将权限重置为初始状态:

sudo flatpak override --reset com.jetbrains.IntelliJ-IDEA-Community

@Carolus 对挂载目录的提示对我来说非常有用: 在我的 Linx Mint 上,jdk 已安装在 /usr/lib/jvm/java-11-openjdk.

(通过使用“which java”找到并将结果与​​“readlink -e”一起使用)

选择了/var/运行/host/usr/lib/jvm/java-11-openjdk 相反,在 Idea addJdk 对话框中,它有效!不需要更改 flatpak 权限。

防止使用 flatpak 覆盖权限

将 jvm 文件夹移动到主目录中的新文件夹

Flatpak 有特定的黑名单目录,而 home 是白名单。

mkdir ~/ForceHome

sudo mv /usr/lib/jvm ~/ForceHome

在 /usr/lib/jvm

中创建符号 link

这是为了防止任何文件仍然指向那里,因此您可以使用可以访问该文件夹的程序指向 /usr/lib/jvm。

sudo ln -s ~/ForceHome/jvm /usr/lib/jvm

Select /ForceHome/jvm/jdk_version 在Intellij中选择sdk时

将jdk_version替换为您下载的openjdk版本