应用程序在目标硬件上远程运行。用户可以选择启用可视化调试输出(使用命令行开关),在这种情况下,使用ssh的X11转发来查看它。如果用户忘记在运行应用程序之前建立连接,则会出现问题,如下所示:ssh -YC remote.host。应用程序将崩溃。我想提前检测这种情况,并在启动应用程序时打印适当的消息。在C/C++中可以这样做吗?在最坏的情况下,我可以在后台执行一些shell命令。
ssh -YC remote.host
vi4fp9gy1#
如果你有一个X11显示器(真实的或者通过ssh转发的),你就有一个DISPLAY环境变量,否则它就不应该存在。侵入性最小的检查可能是:
DISPLAY
if (!getenv("DISPLAY")) { fprintf(stderr, "missing X11 display, have you forgotten something?\n"); exit(1); }
如果有人忘记了在ssh中转发X,这应该会触发。
p3rjfoxz2#
您可以使用XOpenDisplay man page
#include <X11/Xlib.h> #include <cstdlib> #include <iostream> bool displayIsValid() { char* disp = getenv("DISPLAY"); if ( disp==nullptr ) return false; Display* dpy = XOpenDisplay(disp); if ( dpy==nullptr ) return false; XCloseDisplay(dpy); return true; } int main() { if ( displayIsValid() ) { std::cout << "Display is valid" << std::endl; } }
2条答案
按热度按时间vi4fp9gy1#
如果你有一个X11显示器(真实的或者通过ssh转发的),你就有一个
DISPLAY
环境变量,否则它就不应该存在。侵入性最小的检查可能是:
如果有人忘记了在ssh中转发X,这应该会触发。
p3rjfoxz2#
您可以使用XOpenDisplay man page