C语言 X11 defaultrootwwindow段故障仅在Systemctl运行程序时发生 &g



我是Linux和C开发的新手,试图用X11库在C中进行屏幕截图。如果我正常编译和运行我的程序,屏幕截图是正确的,没有问题。如果我将程序作为服务运行,如

sudo systemctl start screenshot

程序失败。日志和使用GDB分析coredump都只显示

Program terminated with signal SIGSEGV, Segmentation fault.

我已经在我的代码中设置了手动日志:

int main(int argc, char** argv ){
FILE *fp = fopen("log.txt", "w");
setvbuf(fp, NULL, _IONBF, 1024);
fputs("2", fp);
Display* display = XOpenDisplay(NULL);
fputs("5", fp);
Window root = DefaultRootWindow(display);
fputs("6", fp);

作为服务运行时,log.txt包含序列25。如果从。/screen这样的终端运行,程序将正常终止。

如能提供任何提示以查找问题的原因,我将不胜感激。

David指出检查display是否为NULL,一些搜索显示问题是程序在作为服务运行时无法打开display

基于这个问题:https://unix.stackexchange.com/questions/537628/error-cannot-open-display-on-systemd-service-which-needs-graphical-interface

将systemd服务文件中的Environment设置为

Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/<username>/.Xauthority

解决了问题,服务正常运行。

最新更新