我正在尝试使用Java中的ProcessBuilder运行一些pulseaudio操作,例如在Ubuntu 18.04上的pacmd list-source-outputs。当我直接从Intellij运行代码时,它说No PulseAudio daemon running, or not running as session daemon.
但是,如果我去build / classes / java / main并执行java MyMainClass,它将按预期工作。

我认为这与Intellij终端的集成方式有关。它的行为似乎与OS终端不同(请参见图片)。是否有人对Intellij终端有更多见解?

Process p = null;
try {
    p = new ProcessBuilder("pacmd", "list-source-outputs").start();

    printStream(p.getInputStream());
    printStream(p.getErrorStream());

    p.waitFor();
} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}


java - Intellij Terminal的行为与Ubuntu Terminal的Pulseaudio/pacmd/pactrl命令不同-LMLPHP

编辑:我的终端设置:

java - Intellij Terminal的行为与Ubuntu Terminal的Pulseaudio/pacmd/pactrl命令不同-LMLPHP

java - Intellij Terminal的行为与Ubuntu Terminal的Pulseaudio/pacmd/pactrl命令不同-LMLPHP

最佳答案

问题出在pulseaudio。对我有用的是打电话给

export PULSE_RUNTIME_PATH=/run/user/1000/pulse


在运行任何pulseaudio / pacmd / pacntl命令之前。导出命令doesn't seem to work from runtime。但是,您可以创建一个Shell文件,然后执行命令:

test.sh:

#!/bin/bash
export PULSE_RUNTIME_PATH=/run/user/1000/pulse
pacmd list-source-outputs


在Java中:

Runtime.getRuntime().exec("sh test.sh");


动态调用更容易处理:

test.sh:

#!/bin/bash
export PULSE_RUNTIME_PATH=/run/user/1000/pulse
$1


在Java中:

Runtime.getRuntime().exec("sh test.sh \"pacmd list-source-outputs\"");


这是Jetbrains的官方回答:


  如何启动IDE:从终端通过.sh脚本还是从桌面启动
  发射器?确保尝试通过.sh脚本从终端启动它。
  
  也可以在启动pulseaudio后尝试重新启动IDE或重新启动
  IDE终端中的pulseaudio守护程序。也尝试以下建议:
  https://bbs.archlinux.org/viewtopic.php?pid=1214072#p1214072
  https://bbs.archlinux.org/viewtopic.php?pid=1214157#p1214157
  
  请注意,更改环境后,可能需要重新启动
  IDE。

10-08 05:37