今天接到了一个任务,实现显示屏的关和开

理了下思路:

1.需求:实现终端的开关屏,要求仅仅是终端的屏幕关掉了,但是系统仍旧在跑,可以用遥控器唤醒

2.方向:

2.1. 切断显示屏的电源,进入省电模式

其实这就包含了两方面的

1) 用硬件切断,即,直接关掉显示器的电源

2) 软件切断,因为后续是要通过遥控唤醒

2.2. 关掉显卡的输出功能

说说我的弯弯的实现之路吧:

最开始想的是,我的台式电脑不就是直接把显示器上面的电源开关一按就可以了嘛,那么,终端上面有没有对应的硬件接口,因为本人是硬件出身,干什么都喜欢先想想硬件上面有没有接口。于是就问老大,硬件有接口吗?结果预想中的一样:没有。

那好吧,没有的话,那就换其他的方法。于是就在google和百度,搜索的关键字“Linux 开关屏幕” 之类的,找到了一些资料,虽说对我这个功能的作用不大,但是对了解整个Linux环境还是很不错的。上面介绍了好几种怎么样实现让系统挂起,让其待机,睡眠或者休眠的方法。

首先说说待机的方法吧。

# cd /sys/power/

# cat state

显示的是系统所支持的待机方式:mem disk

# echo "mem" > ./state

整个屏幕就黑了,看看终端的状态,系统已经没有工作,只有电源灯亮着,这是在给内存供电。

要想启动系统,只用按主板上的power键就可以了。

但是很遗憾,我们的终端在用这个方法的时候,很不稳定,完全无法预估什么时候系统就挂了,然后还要重新启动。

这种悲剧往往都会发生在老大过来看成果的时候,所以,老大说,要的不是这样的效果。不需要让整个系统都停下来,因为这个产品的特殊性,要求开机之后直接上电,没有特殊原因是不会断电的,所以开机键也会在某种意义上不是经常用。而且最重要的是因为,我们的需求是要求能够用遥控唤醒,但是在待机状态的时候,系统的应用程序都没有运行了,遥控信号的接收都需要用应用程序来工作,所以,这个方法对我们的需求帮助不大(所以说,需求才是老大)。

就是说,硬件切断和软件切断都没戏了(至少那个时候是这样想的)

那好吧,只剩下关掉显卡输出这一个方法了,正好他们给我布置任务的时候,是要求我用ATI的显卡SDK中的接口实现的,那就按照他们说的去看看。

其实很惭愧,因为本人对SDK的不是很熟悉,只好耐着头皮看文档了,然后看了下Sample,又去网页版上面把每一个函数接口和struct以及常量都熟悉了一遍,其实是翻译加理解了一遍。行,好像有两个接口,一个是启用或者禁用指定的Adapter,即int ADL_Adapter_Active_SetPrefer (int iAdapterIndex, int iStatus, int iNumPreferTarget,ADLDisplayTarget *lpPreferTarget, int *lpNewlyActivate),另一个是动态使能GPU的显示int ADL_DisplayEnable_Set (int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly)。

仔细研究了下参数和平台,发现一个不支持LINUX,一个要求randr版本在1.2以下,我们的是1.3。其实我也不是很拿的定把握,因为毕竟没有实现……

后来就不知道怎么办了,想起上次要求找的接口,也是实现开关屏的,想了想,说不定可以参考下。

命令其实很简单,xset

关屏:$ xset dpms force off

开屏:$ xset dpms force on

但是这种开关屏时间很短,敲击键盘或者鼠标,就可以开屏,想了好久,既然X可以实现关屏,那么肯定是有接口的,但是这接口在哪里呢?如果用这个命令,那么就要屏蔽掉鼠标和键盘的一系列事件,这也不是一个很轻松的活计,说不定会越弄越乱。

想了想,其实,我们所说的让显卡不输出东西,是不是有点要求太高了,关于屏幕的开关,应该是在电源上做文章吧,切掉电源。显卡不输出,如果说显卡依旧输出,但是屏幕不接收可不可以?强行让该屏幕不接收任何东西,就是把屏幕禁用。(屏幕,即显示设备,如LVDS、VGA、DFP1、CRT1、DVI等等)

于是就去google了“linux 关屏”,找到了一个不错的帖子,           如下:http://www.aiview.com/linux/

VGA 的输出可以利用xrandr 命令控制,这个软件包应该已经跟随xorg-x11安装好了。

通过xrandr 命令的输出,知道终端支持以下视频接口:

DFP1

LVDS

CRT1

注:很多时候会有VGA接口,它可外接显示器、投影仪等VGA 设备。

LVDS就是内置的液晶屏接口。

xrandr

不带参数的xrandr 命令会列出系统支持的视频接口名称和设备连接情况。 Screen 0: minimum 320 x 200, current 1080 x 1920, maximum 1920 x 1920

LVDS connected 1080x1920+0+0 right (normal left inverted right x axis y axis) 930mm x 523mm

1920x1080      60.0*+

1680x1050      60.0

1400x1050      60.0

1600x900       60.0

1280x1024      60.0

1440x900       60.0

1280x960       60.0

1280x768       60.0

1280x720       60.0

1024x768       60.0

800x600        60.0

640x480        60.0

DFP1 disconnected (normal left inverted right x axis y axis)

CRT1 disconnected (normal left inverted right x axis y axis)

用以下命令将视频输出发送到某个接口设备。

$ xrandr --output DFP1 --auto

用以下命令关闭某个接口设备的视频输出。

$ xrandr --output LVDS --off

尝试了下,系统的显示屏有3个

LVDS     DFP1     CRT1

终于知道了为什么在程序中去获取系统的显示器的信息的时候,反馈回的是3个屏,2个显示适配器,原来如此(很开心)

LVDS是终端一直在使用的液晶显示屏,DFP1是外接HDMI的屏的接口,至于这个CRT1,估计如上述帖子所说只是硬件集成的有而已。

只能说,Linux博大精深,学习和探索不在一朝一日。

伟大的X

linux用xrandr只有一个屏幕,在Linux下,禁止某一个显示屏的输出相关推荐

  1. linux中如何复制文件并重命名_linux 下怎么复制一个文件到另外一个目录并且重命名...

    在home目录下有wwwroot目录,wwwroot下有sinozzz目录,即/home/wwwroot/sinozzz 一.目录创建 在/home/wwwroot目录下新建一个sinozzz123的 ...

  2. linux snmp设置报警次数,CentOS/RHEL 6下禁止重复的SNMP连接日志

    在默认的情况下,在CentOS/RHEL 6下,当SNMPD运行时,系统日志(/var/log/messages)内会产生大量类似如下的记录: Jan 25 00:30:40 jzbk snmpd[1 ...

  3. linux命令中的命令是什么,linux命令是什么

    Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...

  4. Linux中移动光标cw什么意思,linux常用指令详解

    Linux下ln命令详解 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(lin ...

  5. Linux工具 xrandr屏幕操作工具

    说明:xrandr是RandR(调整大小和旋转)X 窗口系统扩展的官方配置实用程序.它可用于设置屏幕输出的大小.方向.以及 需配置多台显示器的显示扩展等...属于Xorg的命令集中常用命令之一(关于X ...

  6. 把平板、手机作为电脑第二屏幕(Linux系统下)

    将平板.手机作为电脑第二屏幕(Linux系统下) 背景 把手机.平板作为电脑第二屏幕是上个学期偶然想到的,那时我一边看网上的教程一边码代码.由于看的是视频教程,缩小了就看不清上面的字,放大了又会挡住打 ...

  7. adb发送什么命令能在手机屏幕弹窗显示_将平板、手机作为电脑第二屏幕(Linux系统下)...

    背景 把手机.平板作为电脑第二屏幕是上个学期偶然想到的,那时我一边看网上的教程一边码代码.由于看的是视频教程,缩小了就看不清上面的字,放大了又会挡住打字区域.这时就想如果有个第二屏幕就很方便了,买个屏 ...

  8. Linux启动屏幕打印日志,linux启动时如何在屏幕上找到文本显示?这...

    只有内核本身的输出才是dmesg. 另一个输出来自init进程及其启动的服务.在GNU / Linux上常用的init有很多不同的实现(其中一些不称为"init"),它们的行为可能 ...

  9. linux为用户指定资源大小,Linux_Linux系统下生成一个指定大小的文件,在装系统,因此在这里随便记 - phpStudy...

    Linux系统下生成一个指定大小的文件 在装系统,因此在这里随便记点东西. 从前与经理讨论NVR项目的时候,他提到要预先将用户指定好的磁盘空间预留出来,这是比较容易实现的功能.不容易实现的是自己写一个 ...

最新文章

  1. 成功解决AttributeError: 'list' object has no attribute 'ndim'
  2. ArrayBlockingQueue原理分析-remove方法
  3. [css] 什么是脱离文档流?有什么办法可以让元素脱离标准的文档流?
  4. 开账户root远程桌面
  5. day8 Java学习(面向对象.多态接口)
  6. 非常详细的 Docker 学习笔记
  7. mysql-----触发器
  8. java代码块是什么_Java代码块
  9. eeprom和编程器固件 k2_斐讯K1K2新版固件v22.4.xx.xx简单刷机教程
  10. 软件工程4 用例建模
  11. 高通Android camera驱动框架
  12. SSM 按模版导出 PDF
  13. vue 子页面调用父页面的参数_Vue子父组件间的数据传递
  14. 软件定义汽车,OTA技术有多重要?
  15. 编程达人教你如何快速掌握一门编程语言
  16. OPPO Watch 2五大亮点加持 定位旗舰全智能手表
  17. 阿里云人脸人体--人像素描风格化效果体验
  18. pandas查看数据
  19. 陷维权风波,冲高端的小米手机过于激进?
  20. 深入了解超线程、双核CPU、双CPU与单CPU的区别

热门文章

  1. 关于J-link仿真器下载程序至单片机识别不到单片机型号问题
  2. 微信开发者工具最新版本的调试器中不显示AppData和Storage选项问题
  3. Jaa之产生随机数!...
  4. 能否构成三角形的条件代码_平面三角形分割 - 德劳内三角化
  5. 《php开发典型模块大全》读书笔记 第三章 mysql数据库基础
  6. 假期小长假该如何玩?用 Python 分析元旦旅游热门城市
  7. kali arpspoof断网攻击
  8. 2进制,8进制,10进制,16进制互相转换工具
  9. vite无法热更新的原因记录
  10. 网易互娱2017实习生招聘在线笔试第一场 题目1 : 电子数字