无法为 JDK 选择主目录,因为 IntelliJ 看不到它?

Jas*_*son 8 java ubuntu intellij-idea linux-mint flatpak

我的系统是 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 Home Directory for JDK,IntelliJ 似乎只能看到/usr/lib.

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

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

小智 8

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

事实证明,由于 Flatpak 沙箱应用程序的方式,这是“这是一个功能而不是错误”的情况之一。根据http://docs.flatpak.org/en/latest/sandbox-permissions.html 上的文档:

沙盒权限 Flatpak 的主要目标之一是通过将应用程序彼此隔离来提高桌面系统的安全性。这是使用沙箱实现的,这意味着默认情况下,使用 Flatpak 运行的应用程序对主机环境的访问极其有限。这包括:

除了运行时、应用程序和 ~/.var/app/$APPID 之外,无法访问任何主机文件。只有最后一个是可写的。无法访问网络。无法访问任何设备节点(除了 /dev/null 等)。无法访问沙箱外的进程。有限的系统调用。例如,应用程序不能使用非标准网络套接字类型或 ptrace 其他进程。对会话 D-Bus 实例的访问受限 - 应用程序只能在总线上拥有自己的名称。无法访问 X11、系统 D-Bus 或 PulseAudio 等主机服务。大多数应用程序需要访问其中一些资源才能发挥作用。这主要在完成构建阶段完成,可以通过清单文件的完成参数部分进行配置(请参阅清单)。

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

flatpak install flathub org.freedesktop.Sdk.Extension.openjdk9 org.freedesktop.Sdk.Extension.openjdk10 org.freedesktop.Sdk.Extension.openjdk11
Run Code Online (Sandbox Code Playgroud)

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


Cra*_*der 7

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


Car*_*lus 5

As others said - sandboxing is a feature not a bug.

I think @Kevin Dubois' answer should perhaps be preferred where applicable (installing via flatpak the thing you want to share), but there is another solution to this problem if you would like to continue using flatpak

How to find /etc and /usr paths in a flatpak:

As mentioned at the end of this section of the documentation:

  • /etc is mounted at /var/run/host/etc for the flatpakked software
  • /var is mounted at /var/run/host/var for the flatpakked software

If you need to find or manage other paths:

NB: It is generally a good idea to give software as little extra access as possible. That's why it is preferable to use the optional :ro suffix when granting access to a path to make it accessible in read-only. You will also be partly responsible if some software abuses the access it has to your device.

文件系统权限参考中有一些有用的路径变量,这里有很多关于文件系统权限的附加信息。

图形用户界面选项:

Flatseal看起来很整洁。

命令行选项:

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

要检查当前权限:

flatpak info --show-permissions com.jetbrains.IntelliJ-IDEA-Community
Run Code Online (Sandbox Code Playgroud)

要授予访问权限:

sudo flatpak override --filesystem="/var/lib/gems":ro com.jetbrains.IntelliJ-IDEA-Community
Run Code Online (Sandbox Code Playgroud)

禁止访问:

sudo flatpak override --nofilesystem="/var/lib/gems" com.jetbrains.IntelliJ-IDEA-Community
Run Code Online (Sandbox Code Playgroud)

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

sudo flatpak override --reset com.jetbrains.IntelliJ-IDEA-Community
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

在 Idea addJdk 对话框中选择 /var/run/host/usr/lib/jvm/java-11-openjdk ,它可以工作!不需要更改 flatpak 权限。