[英]Get screenshot of linux machine using C++
我有一個C ++程序,該程序可以獲取Ubuntu 14.04計算機的屏幕截圖。 該程序使用X11庫。 我需要在啟動時從守護程序執行此應用程序。 但是它返回XOpenDisplay failed
。 我認為是因為未加載X11服務器。 加載X11服務器后,是否可以通過任何編程方式立即獲取屏幕截圖?
編輯:
缺少任何內容。守護程序在啟動時啟動,無法獲取屏幕截圖。 因此,啟動后,我停止了守護程序,然后從終端再次啟動它。 然后顯示相同的錯誤(XOpenDisplay失敗)。屏幕截圖和守護程序是否存在問題?
這不僅僅是等待X服務器啟動的問題。 要成功連接到它:
DISPLAY
環境變量中。 如果您只是在圖形會話中啟動程序,而不是在啟動后獨立啟動,則滿足所有這些條件。
有多種方法可以在圖形會話中實現程序的啟動。 一種是通過將something.desktop
文件放入/etc/xdg/autostart
目錄中。 您可以從那里檢查其他文件的語法。
在/etc/X11/Xsession.d/
添加腳本。 該腳本將在X11運行時運行。
如果您確實需要在引導時啟動守護程序,那么您可以做的就是從腳本向守護程序進程發送信號 。 啟動守護程序時,需要將pid存儲在某個地方。
kill -SIGUSR1 $PID
然后,您的守護程序應該在開始寄存器處注冊一個信號處理程序 , 該信號處理程序將在接收到信號時被調用。
截屏可能需要動態分配內存,這是您在信號處理程序中無法做到的事情之一。 因此,您需要做的是讓守護程序在條件變量上等待,並讓信號處理程序對其進行設置並通知侍者。
在X11啟動之后而不是在啟動時啟動守護程序會容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.