上海网站建设 润,开发公司销售房产交哪些税,网页设计与制作教程欧静敏,廊坊seo排名公司背景需求两个显示器连接到一台PC#xff0c;期望每台显示器可以单独显示#xff0c;在一台显示器显示时#xff0c;另外一台显示器同PC的连接断开#xff0c;即系统下查看到连接状态为disconnected。同时在显示器上图形化显示当前显示器编号。如下图#xff0c;期望当显示…背景需求 两个显示器连接到一台PC期望每台显示器可以单独显示在一台显示器显示时另外一台显示器同PC的连接断开即系统下查看到连接状态为disconnected。 同时在显示器上图形化显示当前显示器编号。如下图期望当显示器A连接到PC时显示器内容显示为显示器A对B同理。 显示控制 问题 当从显示器A切换到显示B时桌面上的图标不可见。 分析 1 首先查看 当前屏幕设置已经改成为单屏显示。并非扩展屏幕显示导致的。 2 xranr --verbose 通过命令输出可以看到当前screen大小为 3840*1080xrandr --verbose
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384 而此时查询到的当前的分辨率仅仅为1920*1080DP-1 connected 1920x108019200 (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 (argc2)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)