
X 可以截取整個桌面的螢幕截圖。我想在發出這些呼叫時檢測它們,但透過 ebpf 或 sysdig 之類的方式,而不是在伺服器層級修補呼叫。我該如何做到這一點?
答案1
[更多的是評論而不是答案,但評論太長了]
執行此操作的程式必須在伺服器層級掛鉤 X11 呼叫(透過類似機制XACE
, ~ 就像 ebpf 或 sysdig 對核心中的呼叫所做的)。我不知道有什麼現成的東西可以做到這一點,但我沒有對此事做太多研究;-)
如果您只想監視 X11 用戶端執行的請求,您可以使用RECORD
擴展名(如xtruss
確實)或強制客戶端透過 X11 代理,例如xscope
並使用根視窗作為來源(或不屬於該客戶端的任何視窗/像素圖)來尋找任何CopyArea
、等請求。GetImage
一般來說,沉迷於X11 應用程式能夠進行「螢幕截圖」是毫無意義的,因為任何能夠存取X11 伺服器的程式都可以做更多的事情,如果不可信,就不應該放在它附近的任何地方。此外,在同一用戶下運行的本機進程也可以ptrace(2)
互相直接讀取彼此的記憶體。
答案2
是的,我寧願更專注於其他事情,而不是想知道 X11 應用程式是否正在截圖,但我想我現在應該解決這個問題。
網路上似乎沒有任何關於如何編寫這些 x11 掛鉤的材料,但我會研究一下 xtruss。
我現在正在運行 xtruss。使用我從 xwininfo -root -tree 獲得的 X id,我設定 xtruss 來監視該資源。但是,當我執行 xwd -i -out 檔案時,xtruss 不會報告任何內容。測試方法是否錯誤?