OSがディスプレイ出力用に自動的に構成することなく、アプリケーションからのHDMI出力を排他的に駆動することはどのように可能でしょうか?
たとえば、プライマリディスプレイとして標準のDVI / VGAを使用しますが、デバイスファイルを使用してMplayerビデオ出力をHDMIに送信します。
Googleで答えるのは難しい質問です。ほとんどすべての結果は、HDMI経由でオーディオを機能させることに関係しています。
(ここで編集)
以下のコメントは、個別のXorgサーバーを使用して言及されています。これは有用なアイデアですが、私が尋ねた1つの質問と、私が暗示した1つの質問には答えません。
1)他のディスプレイの前にコンソールがロードされている場合、またはそれが唯一のディスプレイである場合(ログインにSSHのみが使用されている場合)、Linuxがコンソールをそのディスプレイに配置したくないようにするにはどうすればよいですか?2)Xがない場合はどうなりますか?グラフィックをアダプタに直接駆動したい。ドライバーと直接対話することなく(おそらく古いですが、SVGALibまたは他の非Xグラフィックレイヤーを使用して)、標準機能を使用してコードからこれを行うことはできますか?
(ここで編集)
SVGALib(古い)とSDLを見ました。後者はXの内外で機能し、OpenGLへのアクセスも提供します。どこかのフォーラムリンクからバージョン1.3を見つけましたが、WebサイトとFTPの両方に最大1.2しか含まれていないようです。SDLは一般的に美しいソリューションですが、次の2つの特定の欠点があります。
1)一般的なcreate-device呼び出しはデバイスインデックスを受け入れますが、それを完全に無視します。
(src/video/bwindow/SDL_bvideo.cc)
BE_CreateDevice(int devindex)
ドライバー固有の呼び出しにも同じ欠陥があるようです。たとえば、DirectFB(私が思うに、コンソールの下にグラフィックスを提供します):
(src/video/directfb/SDL_DirectFB_video.c)
DirectFB_CreateDevice(int devindex)
これらの関数の本体には、デバイスインデックスを設定するための既存の場所がないようです...それらが構築されている標準インターフェイスでのサポートが不足しているため、間違いありません。
2)アダプターが選択された場合、SDLはすべてのディスプレイを自動的に接続するようです。例「testsprite2.c」(ライブラリに付属)は、「common.c」(すべての例に共通の機能)内で処理される「--display」パラメーターを受け入れます。「--display」パラメータで行うのは、1つの大きな結合されたキャンバス内のその画面のX/Y座標を計算することだけであることがわかります。
if (SDL_strcasecmp(argv[index], "--display") == 0) {
++index;
if (!argv[index]) {
return -1;
}
state->display = SDL_atoi(argv[index]);
if (SDL_WINDOWPOS_ISUNDEFINED(state->window_x)) {
state->window_x = SDL_WINDOWPOS_UNDEFINED_DISPLAY(state->display);
state->window_y = SDL_WINDOWPOS_UNDEFINED_DISPLAY(state->display);
}
if (SDL_WINDOWPOS_ISCENTERED(state->window_x)) {
state->window_x = SDL_WINDOWPOS_CENTERED_DISPLAY(state->display);
state->window_y = SDL_WINDOWPOS_CENTERED_DISPLAY(state->display);
}
return 2;
}
したがって、同じアダプタ上にある場合、あるディスプレイを別のディスプレイから分離する方法はありません。SDLは機能しません。
SDLに匹敵する解決策がない限り、または特定のデバイス(devindex)を適切な場所に設定するのが簡単であることが判明しない限り(おそらくそうではなく、したがって、おそらく実装されないままにされた理由)、画面を排他的かつ完全に専用に使用するための最良のオプションは、2番目のデバイスに割り当てられた別のXorgインスタンスの下に独自のウィンドウマネージャーを作成することです。