diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 0cb5c433f..d9d78d5f7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -408,6 +408,17 @@ public final class FXUtils { }); } + private static boolean testLinuxCommand(String command) { + try (final InputStream is = Runtime.getRuntime().exec(new String[]{"which", command}).getInputStream()) { + if (is.read() != -1) { + return true; + } + } catch (Throwable ignored) { + } + + return false; + } + public static void showFileInExplorer(Path file) { String path = file.toAbsolutePath().toString(); @@ -416,6 +427,16 @@ public final class FXUtils { openCommands = new String[]{"explorer.exe", "/select,", path}; else if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) openCommands = new String[]{"/usr/bin/open", "-R", path}; + else if (OperatingSystem.CURRENT_OS.isLinuxOrBSD() && testLinuxCommand("dbus-send")) + openCommands = new String[]{ + "dbus-send", + "--print-reply", + "--dest=org.freedesktop.FileManager1", + "/org/freedesktop/FileManager1", + "org.freedesktop.FileManager1.ShowItems", + "array:string:" + file.toAbsolutePath().toUri(), + "string:" + }; else openCommands = null;