簡體   English   中英

使用C ++獲取Linux機器的屏幕截圖

[英]Get screenshot of linux machine using C++

我有一個C ++程序,該程序可以獲取Ubuntu 14.04計算機的屏幕截圖。 該程序使用X11庫。 我需要在啟動時從守護程序執行此應用程序。 但是它返回XOpenDisplay failed 我認為是因為未加載X11服務器。 加載X11服務器后,是否可以通過任何編程方式立即獲取屏幕截圖?

編輯:

缺少任何內容。守護程序在啟動時啟動,無法獲取屏幕截圖。 因此,啟動后,我停止了守護程序,然后從終端再次啟動它。 然后顯示相同的錯誤(XOpenDisplay失敗)。屏幕截圖和守護程序是否存在問題?

這不僅僅是等待X服務器啟動的問題。 要成功連接到它:

  • X服務器必須正在運行。
  • 程序必須知道要連接的地址,該地址通常存儲在DISPLAY環境變量中。
  • 該程序必須對X服務器進行身份驗證,這通常是通過提供從僅對當前登錄用戶可讀的文件中讀取的X服務器cookie來實現的。

如果您只是在圖形會話中啟動程序,而不是在啟動后獨立啟動,則滿足所有這些條件。

有多種方法可以在圖形會話中實現程序的啟動。 一種是通過將something.desktop文件放入/etc/xdg/autostart目錄中。 您可以從那里檢查其他文件的語法。

/etc/X11/Xsession.d/添加腳本。 該腳本將在X11運行時運行。

如果您確實需要在引導時啟動守護程序,那么您可以做的就是從腳本向守護程序進程發送信號 啟動守護程序時,需要將pid存儲在某個地方。

kill -SIGUSR1 $PID

然后,您的守護程序應該在開始寄存器注冊一個信號處理程序該信號處理程序將在接收到信號時被調用。

截屏可能需要動態分配內存,這是您在信號處理程序中無法做到的事情之一。 因此,您需要做的是讓守護程序在條件變量上等待,並讓信號處理程序對其進行設置並通知侍者。

在X11啟動之后而不是在啟動時啟動守護程序會容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM