linux环境下X11相关问题解决和环境配置 (unable to start device X11cairo)

linux下使用R或者python等命令行操作时,绘图的弹出一般会借助X11 (X_Window_System),因此,在不借助于语言本身的device时,及时弹出绘图界面,在linux/Mac命令行下,需要配置,否则R平台操作会报如下错误:

Error in .External2(C_X11, d d i s p l a y , d display, d display,dwidth, d h e i g h t , d height, d height,dpointsize,
unable to start device X11cairo In addition: Warning message: In
(function (display = “”, width, height, pointsize, gamma, bg, :
unable to open connection to X11 display ‘’

R命令行查看时会有如下显示:在这里插入图片描述

X11显示FALSE,针对以上问题,具体解决方法如下

  1. linux环境配置
    linux操作系统需要安装具体的依赖包,
ubuntu:  sudo apt-get install libx11-dev xserver-xorg-dev xorg-dev
centos: yum install xorg-x11-* libX11-* libXt-*
  1. 显示端口配置
    安装上面以后,需要配置DISPLAY端口,
export DISPLAY=localhost:10.0  || echo "export DISPLAY=localhost:10.0 " >>~/.bashrc # // 默认为0.0,可能被其他设备占用,一般需要更改,10.0或者其他没占用的端口
  1. 远程连接客户端配置
    以putty和MobaXterm为例,putty需要在对应的session ,SSH部分,设置enable X11 forwarding
    在这里插入图片描述
    MobaXterm客户端默认已经进行转发,无需特殊的设置。
  2. 授权用户访问
    用户home目录下有.Xauthority,需要授权使用 (MoTTY X11 proxy: Authorisation not recognised)
xauth list
sudo xauth add <ServerName>/unix:10 MIT MAGIC COOKIE   1 2df6b584ff6448924900165ae51a7589   # //上面显示的最后一行,添加即可。

Reference
Proxy authorization 1
Proxy authorization 2

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是在 Linux 环境下使用 Cairo 库和 libemf 库展示 EMF 文件的示例代码: ``` c++ #include <cairo.h> #include <cairo-pdf.h> #include <emf.h> #include <iostream> int main(int argc, char *argv[]) { // 定义 EMF 文件名 const char *emfFilename = "example.emf"; // 加载 EMF 文件 HENHMETAFILE hEmf = GetEnhMetaFile(emfFilename); // 获取 EMF 文件的大小 RECT emfRect; GetEnhMetaFileHeader(hEmf, sizeof(ENHMETAHEADER), (LPENHMETAHEADER)&emfRect); // 创建一个 Cairo PDF 绘图上下文 cairo_surface_t *surface = cairo_pdf_surface_create("output.pdf", emfRect.right + 1, emfRect.bottom + 1); cairo_t *cr = cairo_create(surface); // 绘制 EMF 文件内容 PlayEnhMetaFile(cr, hEmf, &emfRect); // 刷新 Cairo 绘图上下文 cairo_show_page(cr); // 释放 Cairo 相关资源 cairo_destroy(cr); cairo_surface_destroy(surface); // 释放 libemf 资源 DeleteEnhMetaFile(hEmf); return 0; } ``` 需要注意的是,以上代码中使用的是 Windows 下的 libemf 库,如果需要在 Linux 环境下使用,需要使用相应的库替换。同时,如果需要在 Qt5 中使用 Cairo 库,需要在项目的 .pro 文件中添加以下内容: ``` qmake LIBS += -L/path/to/cairo -lcairo LIBS += -L/path/to/libemf -lemf ``` 其中,/path/to/cairo 应该替换为 Cairo 库的实际路径,/path/to/libemf 应该替换为 libemf 库的实际路径。 以上代码中使用的是 Cairo PDF 绘图上下文,如果需要在屏幕上直接显示 EMF 文件,可以创建一个 Cairo X11 绘图上下文,并将其绑定到一个 X11 窗口上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuantianyixiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值