在Linux下,禁止某一個顯示屏的輸出

來源:互聯網
上載者:User

今天接到了一個任務,實現顯示屏的關和開

        理了下思路:

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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.