- clipscreenは、画面の特定領域をミラーリングする仮想モニターを作成し、その領域を緑色の長方形で表示するシンプルなX11アプリケーション
- Google Meet、Microsoft Teams、Jitsi Meetのような画面共有ツールで、全画面や個別ウィンドウの代わりに仮想モニターを共有できる
- 共有したいウィンドウを緑色の枠内に移動するだけでよいため、複数のウィンドウを個別に共有したり、共有対象を切り替えたりする必要が減る
- 実行は
./clipscreen <width>x<height>+<x>+<y>形式で、hacksawやslopを併用すると対話的な領域選択も可能
- Linuxとxorgでのみテストされており、ほかのシステムで動作するかは保証されていない
clipscreenの機能
- clipscreenは、画面の一部を複製する仮想モニターを生成するアプリケーション
- 指定した画面領域は緑色の長方形で強調表示される
- ユーザーは通常のビデオ会議の画面共有ツールで、この仮想モニターを共有できる
- 例: Google Meet
- Microsoft Teams
- Jitsi Meet
画面共有の仕組み
- 画面全体を共有したり個別のウィンドウを別々に共有したりする代わりに、clipscreenが作成した仮想モニターを共有する
- 共有したいウィンドウは緑色の枠内へ移動すればよい
- 複数のウィンドウを扱う際に、共有ウィンドウを何度も切り替えなくてよい方式
ビルド要件
- システムには次の項目が必要
-
X11開発ライブラリ
- Cairoグラフィックライブラリ
- Cコンパイラ、例:
gcc
- Ubuntu 24.04では次のコマンドで必要なライブラリをインストールできる
apt-get install libx11-dev xserver-xorg-dev xorg-dev libcairo2-dev gcc
- ビルドは次のコマンドで実行する
make
- アプリケーションは**Linuxとxorg**でのみテストされており、ほかのシステムで動作するかは確実ではない
使い方
./clipscreen <width>x<height>+<x>+<y>
- 引数はオーバーレイと仮想モニターの位置とサイズを指定する
<width>: オーバーレイと仮想モニターの幅
<height>: オーバーレイと仮想モニターの高さ
<x>: オーバーレイと仮想モニターの左上のx座標
<y>: オーバーレイと仮想モニターの左上のy座標
- 例は次のとおり
./clipscreen 800x600+100+100
- このコマンドは、画面の
(100, 100)位置から始まる800x600のオーバーレイウィンドウを生成する
対話的な領域選択と終了
- 領域を対話的に選択するには、
hacksawまたはslopと一緒に実行できる
./clipscreen $(hacksaw)
./clipscreen $(slop)
- 関連ツール
- 終了するには、アプリケーションを実行しているターミナルでCtrl+Cを押せばよい
1件のコメント
Hacker News のコメント
そこで xrandr 拡張を使って特定の領域を仮想モニターとしてミラーリングし、その仮想モニターを共有できる小さなツールを作った。
詳細はブログ記事にある: https://www.splitbrain.org/blog/2024-10/11-introducing_clips...
デモ環境としてこのように使っている: https://gist.github.com/radupotop/d77a47767e2e65a7e7d40d1ea8...
sleep(100)を呼んでいる。そのため、特に理由もなく CPU 使用率が高くなる可能性がある。
SIGINT 以外の方法で終了すると仮想出力だけが残り、オーバーレイウィンドウは消えることがあり、少し不格好だが大きな問題ではない。ただし、コード行数を品質やエレガンスの尺度として過度に見ないほうがいい。
この方法は Wayland ではそのままでは不可能だ。その代わり Wayland では、そもそもこのツールが不要かもしれない。権限のないプロセスが画面をキャプチャする標準的な方法はデスクトップポータルであり、少なくとも KDE は画面の矩形キャプチャを含め、さまざまなキャプチャオプションをサポートしている。X.org アプリを実行中でも、XWaylandVideoBridge のおかげで可能だと思われる。
D-Bus があちこちで使われるのはあまりうれしくないが、
org.freedesktop.impl.portal.ScreenCastの実装を差し替えれば、望む画面キャプチャ動作をほぼ置き換えられる点はよい。各アプリがキャプチャ対象の選択機能をばらばらに実装するよりは良い方向だと思う。X11 がハックしやすくて格好いい、という意味ではないわけではないが、完璧な使い方だけを前提にしないなら、コードは肥大化して複雑になり、その分堅牢になる。
例えば
./clipscreen 1 2 3 4を実行してみればいい。何かいじりたければすぐにできる。ICCCM は90年代初頭にさんざん批判されたが、他方にはそれに相当するものがなく、今でもウィンドウマネージャー領域では新しい試みが出続けている。
xrandr --setmonitor screenshare 2560/1x1440/1+0+0 nonegeo=$(slop -f '%w/1x%h/1+%x+%y') && xrandr --setmonitor screenshare "$geo" noneそれでも見事なワンライナーだ。
そうすると、他の人がノートPCで見るのに適したウィンドウサイズかどうかが分かり、プレビューがマウスを追従しながら、ズームレベルとマウス境界をその場で調整できる。
OBS プレビューウィンドウは起動時にメインの OBS ウィンドウなしで開くので、その後はメインの OBS ウィンドウやアプリを見る必要も操作する必要もなく、スタンドアロンのように感じられる点がよい。
https://github.com/BlankSourceCode/obs-zoom-to-mouse
Rectangular Region は選択した画面の一部を共有でき、New Virtual Output は KDE Display Configuration に表示される仮想画面を即座に作成する。この仮想画面は既存の物理ディスプレイ上に重ねて配置される場合もあれば、そうでない場合もある。