当前位置: 首页 > news >正文

显示接口测试

背景需求

两个显示器连接到一台PC,期望每台显示器可以单独显示,在一台显示器显示时,另外一台显示器同PC的连接断开,即系统下查看到连接状态为disconnected。

同时在显示器上图形化显示当前显示器编号。如下图,期望当显示器A连接到PC时,显示器内容显示为:显示器A;对B同理。

显示控制

问题

当从显示器A切换到显示B时,桌面上的图标不可见。

分析

1) 首先查看 当前屏幕设置,已经改成为单屏显示。并非扩展屏幕显示导致的。

2) xranr --verbose

通过命令输出可以看到当前screen大小为 3840*1080

xrandr --verbose 
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384

而此时查询到的当前的分辨率仅仅为1920*1080

DP-1 connected 1920x1080+1920+0 (0x47) normal (normal left inverted right x axis y axis) 477mm x 268mmIdentifier: 0x43Timestamp:  545969Subpixel:   unknownGamma:      1.0:1.0:1.0Brightness: 1.0Clones:    CRTC:       2CRTCs:      0 1 2Transform:  1.000000 0.000000 0.0000000.000000 1.000000 0.0000000.000000 0.000000 1.000000filter: EDID: 00ffffffffffff0009d10185010000002619010368301b78ee0db0a755499b25155054a7ef80d1c08100810f818081c0a9c0b3000101023a801871382d40582c4500dd0c1100001a000000fd00384b1e5312000a202020202020000000fc0042656e5120444c323230360a20000000ff00455446394630303333303030560013_MUTTER_PRESENTATION_OUTPUT: 0 Content Protection: Undesired supported: Undesired, Desired, EnabledColorspace: Default supported: Default, RGB_Wide_Gamut_Fixed_Point, RGB_Wide_Gamut_Floating_Point, opRGB, DCI-P3_RGB_D65, BT2020_RGB, BT601_YCC, BT709_YCC, XVYCC_601, XVYCC_709, SYCC_601, opYCC_601, BT2020_CYCC, BT2020_YCCmax bpc: 12 range: (6, 12)Broadcast RGB: Automatic supported: Automatic, Full, Limited 16:235audio: auto supported: force-dvi, off, auto, onsubconnector: VGA supported: Unknown, VGA, DVI-D, HDMI, DP, Wireless, Nativelink-status: Good supported: Good, BadCONNECTOR_ID: 103 supported: 103non-desktop: 0 range: (0, 1)1920x1080 (0x47) 148.500MHz +HSync -VSync *current +preferredh: width  1920 start 2008 end 2052 total 2200 skew    0 clock  67.50KHzv: height 1080 start 1084 end 1089 total 1125           clock  60.00Hz

于是猜测,是否由于另外一个显示器的信息还在系统中导致此问题。

通过如下命令,关闭另外一个显示接口的输出:

xrandr --output DP-2 --off

此时再切换显示器,则可以正常显示ubuntu桌面信息。

复制屏

也称为mirrors ,即两个显示器显示同样的内容。

通过xrandr也可以进行配置。

但是配置复制屏幕不能解决此问题。

可视化提示信息

需求:

1) 关键信息字体 特殊标识:例如 显示器A。

当前连接 显示器A

2) 采用ubuntu自带软件。

xlib库

通过下面的代码可以显示一个窗口及文字提示,而且xlib库不需要单独安装。但是从下面图中可以看到,其中的文字很小,不符合要求。而要调整文字大小,通过xlib库相当繁琐。

如下代码for死循环是必须的,不然会很快退出,看不到窗口。

/** 下边是编译命令* gcc x11.c -o zhdisplay_test  -I/usr/X11R6/include -L/usr/X11R6/lib -lX11*/#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <X11/XKBlib.h>#define XK_Escape 0xFF1Bint main(int argc,char *argv[])
{Display *display;Window window;XEvent event;KeySym key_symbol;    char msg[] = {"Test VGA"};    int s;int i = 0;int win_width;int win_height;if (argc<2)memcpy(msg, "Test VGA",strlen(msg));else{if (!strncmp(argv[1],"DPB",3))memcpy(msg, "Test DPB",strlen(msg));if (!strncmp(argv[1],"DPC",3))memcpy(msg, "Test DPC",strlen(msg));  /* 与Xserver建立连接 */display = XOpenDisplay(NULL);if (display == NULL){fprintf(stderr, "Cannot open display\n");exit(1);}s = DefaultScreen(display);    win_width = DisplayWidth(display, s);win_height = DisplayHeight(display, s);printf("w:%d,h :%d\n",win_width,win_height);/* 创建一个窗口 */window = XCreateSimpleWindow(display, RootWindow(display, s), win_width/2, 0, win_width/2, win_height, 1,BlackPixel(display, s), WhitePixel(display, s));/* 选择一种感兴趣的事件进行监听 */XSelectInput(display, window, ExposureMask | KeyPressMask);/* 显示窗口 */XMapWindow(display, window);/* 事件遍历 */for (;;){XNextEvent(display, &event);  // 阻塞函数/* 绘制窗口或者重新绘制 */if (event.type == Expose){//TO DO }/* 当检测到键盘按ESC键,退出消息循环 */if (event.type == KeyPress){key_symbol = XkbKeycodeToKeysym(display, event.xkey.keycode, 0,0);if  (XK_Escape == key_symbol) {break;}}XDrawString(display, window, DefaultGC(display, s), win_width/4-10, win_height/2, msg, strlen(msg));         }       /* 关闭与Xserver服务器的连接 */XCloseDisplay(display); return 0;}

图像显示命令

于是,考虑用是否有系统命令可以直接显示图片,结论是可以的。

如下两个命令,带图片名称就可以打开

xdg-open

问题: 通过pkill 杀掉此命令对应的进程时,图片窗口还在。

eog

可以被pkill杀死。eog 输出,可以看到提示信息清晰。

在此基础上,我们可以设计各种各样的底色图片,对显示接口进行测试。

解决这个问题在于思路的转变,从代码层面转换到工具层面,体现解决问题的灵活性。

参考资料

linux 视频输出xrandr设置命令 - 简书 (jianshu.com)

http://www.lryc.cn/news/26297.html

相关文章:

  • Tcl_Init error: Can‘t find a usable init.tcl in the following directories
  • 进程控制(详解)
  • 瓜子大王稳住基本盘,洽洽食品做对了什么?
  • 【音视频安卓开发 (十一)】jni基础
  • 通过FRP搭建内网穿透,实现域名访问局域网本机
  • Pytorch 代码复现终极指南【收藏】
  • iOS 后台运行
  • 软设下午题第一大题--数据流图(做题)
  • springboot内嵌Tomcat 安全漏洞修复
  • Android OTA 相关工具(三) A/B 系统之 bootctl 工具
  • 【Flink】org.apache.flink.table.api.ValidationException: SQL validation failed
  • 宏基因组鉴定病毒流程中需要的生物信息工具
  • Doris入门篇-分区分桶实验
  • Spring-Xml配置
  • 设计模式-工作线程 创建多少线程池合适
  • 【算法基础】深度优先搜索(DFS) 广度优先搜索(BFS)
  • 【分布式】ProtocolBuffer平滑升级原则
  • 第四阶段17-关于Redis中的list类型,缓存预热,关于Mybatis中的`#{}`和`${}`这2种格式的占位符
  • stringstream用法
  • 2022年下半年系统集成项目管理工程师综合知识真题及答案解析
  • 【洛谷 P2089】烤鸡(搜索)
  • Mac item2 配置免密登录开发机
  • vue 解决问题:Webpack安装不成功,webpack -v无法正常显示版本号
  • 07-1【openEuler】系统及进程管理(网络管理的补充实验及说明)
  • 【Linux】磁盘结构、文件系统、软硬链接、动静态库链接
  • 交换机电口、光口、网络速率的基本概念总结
  • 【面试题 05.02. 二进制数转字符串】
  • webpack - webpack的基本使用和总结
  • 【蓝桥杯嵌入式】定时器实现按键单击,双击,消抖以及长按的代码实现
  • 基于SSM的Javaweb爱心扶贫捐赠系统