void () { if (!SystemInfoRt.isLinux) return; try { Process proc = Runtime.getRuntime().exec("ldd " + System.getProperty("java.home") + "/lib/libjcef.so"); StringBuilder missingLibs = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream(), StandardCharsets.UTF_8))) { String line; String delim = " => "; String prevLib = null; while ((line = reader.readLine()) != null) { if (line.contains("not found") && !line.contains("libjvm")) { String[] split = line.split(delim); if (split.length != 2) continue; String lib = split[0]; if (lib.equals(prevLib)) continue; if (!missingLibs.isEmpty()) missingLibs.append(", "); missingLibs.append(lib); prevLib = lib; } } } if (proc.waitFor() == 0 && !missingLibs.isEmpty()) { String msg = IdeBundle.message("notification.content.jcef.missingLibs", missingLibs); Notification notification = NOTIFICATION_GROUP.getValue(). createNotification(IdeBundle.message("notification.title.jcef.startFailure"), msg, NotificationType.ERROR); //noinspection DialogTitleCapitalization notification.addAction(new AnAction(IdeBundle.message("action.jcef.followInstructions")) { @Override public void actionPerformed(@NotNull AnActionEvent e) { BrowserUtil.open(MISSING_LIBS_SUPPORT_URL); } }); notification.notify(null); } } catch (Throwable t) { LOG.error("failed to identify JCEF missing libs", t); } }