• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

Linux 使用 Xvfb 虛擬幀緩衝區環境執行 X Window 視窗程式

介紹如何在 Linux 系統下使用 Xvfb 虛擬幀緩衝區環境執行 X Window 視窗程式。

安裝 xvfb 套件

若在 Ubuntu 或 Debian Linux 中,可以使用 apt 安裝 xvfb 套件:

# 安裝 xvfb 套件
sudo apt install xvfb

若在 RHEL/CentOS Linux 中,則可使用 yum 安裝 xorg-x11-server-Xvfb 套件:

# 安裝 xorg-x11-server-Xvfb 套件
sudo yum install xorg-x11-server-Xvfb

Xvfb 建立虛擬幀緩衝區

Xvfb 指令可以用來建立虛擬幀緩衝區環境,也就是虛擬的 XWindow 伺服器,讓視窗應用程式可以在這個環境中執行,例如在 :1 顯示連接埠建立一個虛擬幀緩衝區環境,接著利用此環境執行 xlogo 這個視窗應用程式:

# 建立 Xvfb 虛擬幀緩衝區環境
Xvfb :1 -screen 0 1024x768x24

# 執行視窗程式
export DISPLAY=:1
xlogo

xvfb-run 以虛擬幀緩衝區執行程式

xvfb-run 是一個 Xvfb 指令的包裝版本,它簡化了啟動虛擬幀緩衝區環境以及執行視窗程式的流程,只要執行 xvfb-run 指令並指定要執行的視窗程式即可:

# 在 Xvfb 虛擬幀緩衝區環境執行 xlogo 程式
xvfb-run xlogo

xvfb-run 預設會固定使用 :99 這個顯示連接埠,若要讓他自動挑選可用的顯示連接埠,可以加上 --auto-servernum 參數:

# 自動選擇可用的顯示連接埠
xvfb-run --auto-servernum xlogo

若要自行指定 Xvfb 所需的參數,可以使用 --server-args 來帶入:

# 指定虛擬幀緩衝區解析度與顏色深度
xvfb-run --server-args="-screen 0 1024x768x24" ico -faces

以 Xvfb 環境執行 ImageJ 指令稿

ImageJ 的指令稿在執行時會需要 X Window 的環境,在伺服器上可以使用 Xvfb 的環境來執行 ImageJ 的指令稿。

假設我們有一個 ImageJ 指令稿 script.ijm 內容如下:

// 取得參數
args = getArgument;
print(args);

在沒有 X Window 的環境之下,可以改用 Xvfb 環境來執行:

# 以 Xvfb 執行 ImageJ 指令稿
xvfb-run --auto-servernum /path/Fiji.app/ImageJ-linux64 -batch /path/script.ijm MyArg
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
MyArg

擷取 Xvfb 畫面

若要擷取應用程式在 Xvfb 環境下運行的畫面,可以使用 import 指令來達成。

首先按照普通的方式執行視窗程式:

# 建立 Xvfb 虛擬幀緩衝區環境
Xvfb :1 -screen 0 800x600x16 &

# 執行視窗程式
DISPLAY=:1 xlogo

在視窗程式執行期間,以 import 將畫面擷取為 PNG 圖檔:

# 擷取虛擬幀緩衝區畫面
DISPLAY=:1 import -window root screenshot.png

這是以 import 擷取畫面的另外一種寫法,作用相同:

# 擷取虛擬幀緩衝區畫面
import -window root -display :1 -screen screenshot.png

若要將畫面錄製成影片檔案,可以使用 ffmpeg:

# 錄製虛擬幀緩衝區畫面
ffmpeg -video_size `DISPLAY=:1 xdpyinfo | grep 'dimensions:' | awk '{print $2}'` -framerate 24 -f x11grab -i :1.0+0,0 output.mpg

參考資料

  • 东东’s Blog:Xvfb的截图与录制

分類:Linux

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide