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

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

理了下思路:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值