ZPC显控一体机,精彩不止一面!

显控一体机的应用,有很多场景会遇到自带显示屏固定不灵活、尺寸不够大等问题。扩展屏幕便是一个很好的解决方案!本文将带您解锁ZPC显控一体机的“多面精彩”。

ZPC简介

ZPC系列显控一体机 是广州致远电子全新研发的集“显示”+“控制”一体化的高性能显控终端产品。外框采用铝合金材质,简洁耐用;产品集成了多路隔离RS485、多路隔离CAN总线、多路千兆以太网等丰富外设。支持多种工业通信协议,工业互联超便捷!支持拖拽式开源AWTK GUI,版权无忧!支持AWFlow流图编程,应用开发很简单!还支持ZWS云,数据上云很轻松!更有HDMI输出4K@60fps显示,配合自带的10.1英寸高清屏可实现双屏异显,精彩不止一面!

背景说明

显控一体机的应用中,一般的场景下自带的显示屏即可满足。不过也有很多使用场景局限于自身屏幕固定不灵活、尺寸不够大等,得不到更好的使用。假如显控一体机也支持屏幕扩展,那这个问题将会迎刃而解。致远电子全新研发的ZPC显控一体机便具有该功能。

ZPC自身携带一块10.1英寸1280*800高分辨率屏幕,同时支持HDMI扩展输出4K@60fps画面,双屏同显、双屏异显都可以轻松拿捏。

双屏同显

插入HDMI外扩屏幕后,执行以下指令,将显示设置为双屏同显。双屏同显情况下两个显示屏会显示一样的内容,可以用于设备屏幕损坏临时调试,或需要外接显示器时使用。

xrandr --output HDMI-1  --auto --same-as LVDS-1

双屏异显

插入HDMI外扩屏幕后,执行以下指令,将显示设置为双屏同显。双屏同显情况下两个显示屏会显示不同的内容,默认情况下,HDMI显示屏会位于ZPC自带屏幕的右边,此时触摸屏无法直接操作HDMI屏幕内容,需要外接鼠标进行操作。

xrandr --output HDMI-1 --auto --right-of LVDS-1

双屏异显模式下支持右侧、左侧、上方、下方四种模式,设置方式分别如下:

/* 右侧异显 */
xrandr --output HDMI-1 --right-of LVDS-1 --auto
/* 左侧异显 */
xrandr --output HDMI-1 --left-of LVDS-1 --auto
/*上方异显 */
xrandr --output HDMI-1 --above LVDS-1 --auto
/* 下方异显 */
xrandr --output HDMI-1 --below LVDS-1 --auto

配置修改

可以通过修改/vendor/scripts/setup-dual-display.sh,修改默认HDMI的规则来达成,修改DIFF_DIS的值即可。如果要修改异显模式,也可以按照下方示例修改。

#!/bin/bash export DISPLAY=:0
export XAUTHORITY=/home/zlg/.XauthorityDIFF_DIS=1  #为1是为双屏异显,为其他值时为双屏同显status=$(cat /sys/class/drm/card0-HDMI-A-1/status)
if [ "$status" == "disconnected" ];thenecho "HDMI disconnected"
elseHDMI_OUTPUT=$(xrandr | grep " connected " | grep "HDMI" | awk '{ print $1 }')if [ "${DIFF_DIS}" = "1" ];thenxrandr --output ${HDMI_OUTPUT} --auto --right-of LVDS-1 #如果需要修改异显模式,修改此处即可elsexrandr --output ${HDMI_OUTPUT} --same-as LVDS-1 --autofiecho "HDMI connected"
fixinput map-to-output ns2009_ts LVDS-1

异显实例

在Debian系统下通常使用X11窗口框架进行编程,以下是一个异显(右侧)的示例,在ZPC主屏上显示绿色全屏窗口,在HDMI副屏上显示蓝色全屏窗口。代码如程序清单1所示。

其中,窗口管理需要借助wmctrl工作进行,需要在zpc一体机上安装wmctrl工具。

程序清单1 测试程序清单

[root@zpc:~]# apt update
[root@zpc:~]# apt install -y wmctrl
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
// create_window: 创建窗口
Window create_window(Display *display, int screen, int x, int y, unsigned long background, int width, int height) {Window window;XSetWindowAttributes attributes;attributes.background_pixel = background;window = XCreateWindow(display, RootWindow(display, screen),x, y, width, height, 0,CopyFromParent, InputOutput, CopyFromParent,CWBackPixel, &attributes);XMapWindow(display, window);XFlush(display);return window;
}
// set_window_pos:设置窗口位置
void set_window_pos(Window window, int x, int y)
{char command[256];snprintf(command, 256, "wmctrl -i -r 0x%lx -e 0,%d,%d,-1,-1", (unsigned long) window, x, y);system(command);
}
// set_window_fullscreen:设置窗口为全屏模式
void set_window_fullscreen(Window window)
{char command[256];system(command);snprintf(command, 256, "wmctrl -ir 0x%lx -b add,fullscreen", (unsigned long) window);system(command);
}
int main() {Display *display;int screen;Window root;Window window1, window2;XRRScreenResources *res;XRROutputInfo *info;XRRCrtcInfo *crtc_info;int num_outputs;int screen_width, screen_height;// 获取X dispaydisplay = XOpenDisplay(NULL);if (display == NULL) {fprintf(stderr, "Unable to open X display\n");exit(1);}// 获取screen,注意这里两个显示器都位于同一screen下screen = DefaultScreen(display);// 获取根窗口,也就是桌面root = RootWindow(display, screen);// 获取屏幕资源个数,对应显示器个数res = XRRGetScreenResources(display, root);num_outputs = res->noutput;if (num_outputs < 2) {fprintf(stderr, "Less than 2 screens detected\n");XCloseDisplay(display);exit(1);}// 获取第一个显示器的CrtcInfoinfo = XRRGetOutputInfo(display, res, res->outputs[0]);crtc_info = XRRGetCrtcInfo(display, res, info->crtc);screen_width = crtc_info->width;screen_height = crtc_info->height;printf("first screen width = %d, screen height = %d\n", screen_width, screen_height);// 在第一个显示器上创建窗口,并显示绿色window1 = create_window(display, screen, 0, 0, 0x00ff00, screen_width, screen_height);// 获取第二个显示器的CrtcInfoinfo = XRRGetOutputInfo(display, res, res->outputs[1]);crtc_info = XRRGetCrtcInfo(display, res, info->crtc);screen_width = crtc_info->width;screen_height = crtc_info->height;printf("second screen width = %d, screen height = %d\n", screen_width, screen_height);// 在第二个显示器上创建窗口并显示蓝色// 但此时两个窗口会被窗口管理器叠加到主显示器window2 = create_window(display, screen, crtc_info->x, crtc_info->y, 0x0000ff, screen_width, screen_height);// 将第二个窗口定位到HDMI显示屏set_window_pos(window2, crtc_info->x, crtc_info->y);// 将两个窗口设置为全屏set_window_fullscreen(window1);set_window_fullscreen(window2);// 保持应用程序运行while (1) {sleep(1);}XCloseDisplay(display);return 0;
}

将程序清单1保存为main.c,并在Ubuntu(主机或虚拟机)上安装对应库并进行编译。

host$ sudo apt install x11-xserver-utils:arm64 libx11-dev:arm64 
host$ aarch64-linux-gnu-gcc -o dual_screen main.c -lX11 -lXrandr

将编译出来的测试程序dual_screen拷贝到ZPC一体机上,并执行测试。测试结果如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/417629.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pytorch深度学习框架搭建神经网络

简介 现在主流有两个框架pytorch和TensorFlow,本文主要介绍pytorch PyTorch&#xff1a;由 Facebook 的人工智能研究小组开发和维护。PyTorch 以其动态计算图&#xff08;Dynamic Computational Graph&#xff09;和易用性著称&#xff0c;非常适合研究人员和开发者进行实验和…

在SOLIDWORKS中高效转换:从实体模型到钣金件的设计优化

在设计生产中&#xff0c;当我们收到中间格式的模型文件时&#xff0c;并希望将其转换为钣金件以进一步加工生产&#xff0c;该怎么做呢&#xff1f; 利用SOLIDWORKS软件&#xff0c;可以直接将实体模型转换为钣金件&#xff0c;来完成后续的设计。 中性文件 钣金件 一、设置…

密钥分发与公钥认证:保障网络通信的安全

在网络通信中&#xff0c;密钥的安全分发和公钥的有效认证是确保系统安全的关键。本文将为基础小白介绍密钥分发与公钥认证的基本概念和实际应用&#xff0c;帮助大家更好地理解这些技术如何保障我们的网络通信安全。 1. 密钥分发与公钥认证的背景 由于密码算法是公开的&…

_get_gt_mask、cat_mask、_get_other_mask

import torch# 定义获取标签掩码的函数 def _get_gt_mask(logits, target):print("原始 logits:\n", logits)print("目标 target:\n", target)# 将 target 拉平为一维张量target target.reshape(-1)print("拉平后的 target:\n", target)# 创建一…

C端产品如何转行成为大模型产品经理?

1、能力优劣势 C端产品经理的优势在于对用户需求、用户体验、数据分析、市场竞争等方面有较深的理解和实践&#xff0c;能够从用户视角出发&#xff0c;设计出吸引和留住用户的产品功能和交互。 C端产品经理的劣势在于对大模型的技术原理、应用场景、生态建设等方面缺乏足够的…

探伤仪的介绍

探伤仪就是一个高级测厚仪而已。 也有人说探伤仪功能那么强大&#xff0c;怎么说实质上就是一个测厚仪呢&#xff0c; 大家想想看&#xff0c;所谓探伤&#xff0c;最基本的要求就是测出工件内部缺陷的位置&#xff0c;这不就是测厚功能吗&#xff0c; 当然除了测厚&#xf…

pyro ExponentialLR 如何设置优化器 optimizer的学习率 pytorch 深度神经网络 bnn,

第一。pyro 不支持 “ReduceLROnPlateau” &#xff0c;因为需要Loss作为输入数值&#xff0c;计算量大 pytorch的学习率调整 视频 看这个博主的视频 05-01-学习率调整策略_哔哩哔哩_bilibili 第二 &#xff0c;svi 支持 scheduler注意点&#xff0c; 属于 pyro.optim.PyroOp…

从0到1深入理解vite

一、什么是构建工具 ts:如果遇到ts文件&#xff0c;我们需要使用tsc把ts转换为jsreact/vue &#xff1a; 安装react-compiler、vue-conplier 将我们写的jsx或者vue文件转换成render函数less/sass/postcss/somponent-style:我们又需要less-loader、sass-loader等一系列编译工具…

目标检测-RT-DETR

RT-DETR (Real-Time Detection Transformer) 是一种结合了 Transformer 和实时目标检测的创新模型架构。它旨在解决现有目标检测模型在速度和精度之间的权衡问题&#xff0c;通过引入高效的 Transformer 模块和优化的检测头&#xff0c;提升了模型的实时性和准确性。RT-DETR 可…

Ceph RBD使用

CephRBD使用 一、RBD架构说明二、RBD相关操作1、创建存储池2、创建img镜像2.1 创建镜像2.1.2 查看镜像详细信息2.1.3 镜像其他特性2.1.4 镜像特性的启用和禁用 3、配置客户端使用RBD3.1 客户端配置yum源3.2 客户端使用admin用户挂载并使用RBD3.2.1 同步admin账号认证文件3.2.2 …

社交媒体的智能变革:Facebook AI优化用户体验

Facebook作为全球领先的社交平台&#xff0c;一直致力于通过人工智能&#xff08;AI&#xff09;技术提升用户体验。AI技术在Facebook的应用涵盖了推荐系统、自然语言处理、广告投放和用户反馈等多个方面&#xff0c;使平台的互动和内容体验更加智能和个性化。 推荐系统的智能化…

结构型设计模式—外观模式

结构型设计模式—外观模式 在软件开发的过程中&#xff0c;你是否遇到过这样的情况&#xff1a;你需要调用一个复杂系统中的多个模块&#xff0c;而每个模块都有自己的接口和使用方法&#xff0c;这让你不得不面对复杂的调用逻辑和大量的冗余代码&#xff1f;这时候&#xff0…

【网络安全】XSS+OTP绕过+账户接管

未经许可,不得转载。 文章目录 正文XSSOTP绕过账户接管正文 目标:www.example.com XSS 不断寻找可能存在XSS的点位。 终于,在个人资料页面:www.example.com/profile_details.php?userid= ,使用Payload<script>alert(1)</script>,实现XSS: 因此,能够实…

vxe-table——实现table 动态显示 +冻结列等功能——技能提升

之前我也有写过类似的功能&#xff0c;就是可以自定义勾选需要展示的列。 不过之前是我自己写的弹窗处理的&#xff0c;有现成的插件vex-table插件可以使用。 vxe-table官网&#xff1a;https://vxetable.cn/v3/#/table/api 解决步骤1&#xff1a;安装vxe-table——npm inst…

HTTP状态码介绍,带你了解请求响应全过程

1xx状态码&#xff1a;&#x1f449;表示信息响应&#xff0c;客户端请求已被接收&#xff0c;继续处理。 100 - Continue&#xff1a;客户端应继续其请求。&#x1f914; 101 -Switching Protocols&#xff1a;服务器已经理解并接受了客户端的请求&#xff0c;将切换协议。 10…

【自用14】C++俄罗斯方块-思路复盘

1.编写主函数 int main(void){welcome();//欢迎函数system("pause");//窗口停留colsegraph();//关闭图画return 0;//返回值 }其中包含有最开始的欢迎&#xff0c;以及基础的窗口停留、图画关闭和返回值语句 2.编写欢迎函数 需求&#xff1a; 欢迎函数中需要包含的…

Java如何读取resources目录下的文件路径(九种代码示例教程)

本文摘要&#xff1a;Java如何读取resources目录下的文件路径 &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。公粽号&#xff1a;洲与AI。 &#x1f91…

教育行业解决方案:智能PPT在教育行业的创新应用

在信息化时代&#xff0c;教育行业面临着巨大的变革。随着人工智能技术的不断发展&#xff0c;传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者&#xff0c;推出了歌者 PPT &彩漩 PPT&#xff0c;为教师、学生和家长提供了一种全新的教育体验&#xff0c;实现了…

Quartz.Net_持久化

简述 通常而言&#xff0c;Quartz.Net的数据默认是存储在运存中的&#xff0c;换言之&#xff1a;断电即失。所以在默认情况下&#xff0c;当系统重启后&#xff0c;原先的所有任务、触发器、调度器都会失效 为避免上述情况的发生&#xff0c;可以对Quartz.Net进行持久化设置…

第二十一届华为杯数学建模经验分享之资料分享篇

今天给大家分享一些数学建模的资料&#xff0c;通过这些资料的学习相信你们一定在比赛中获得好的成绩。今天分享的资料包括美赛和国赛的优秀论文集、研赛的优秀论文集、推荐数学建模的相关书籍、智能算法的学习PPT、python机器学习的书籍和数学建模经验分享与总结&#xff0c;其…