我有一个简单的shell脚本来启动一个X11应用程序。当我执行这个shell脚本表单时,我的登录shell /终端xQuartz启动并显示出来。但是,当在swift中运行脚本时,该进程不会显示xQuartz。你知道我怎么才能拿到显示器吗?
另外,检测是否安装了xQuartz的最佳方法是什么?检查xterm是否存在?
let process = Process()
process.executableURL = URL(fileURLWithPath: "/bin/sh")
let startScriptURL = Bundle.main.url(forResource: "run", withExtension: "sh")
guard let startScriptPath = startScriptURL?.path else {
return
}
process.arguments = [startScriptPath]
do {
try process.run()
} catch let error {
print(error)
}run.sh:
#!/bin/sh
/opt/X11/bin/xeyes发布于 2018-01-20 23:54:09
我想出了如何将DISPLAY环境或任何环境变量传递给进程。
当前环境可以通过以下方式获取:
ProcessInfo().environment
所以我现在使用这个:
let process = Process()
guard let envDisplay = ProcessInfo().environment["DISPLAY"] else {
print("Please install xQuartz")
return
}
process.environment = ["DISPLAY": envDisplay]我是从这里得到这个想法的:Issue launching X11 app via NSTask
https://stackoverflow.com/questions/48356591
复制相似问题