web-dev-qa-db-ja.com

fakexrandr、ミラーフェイクディスプレイ-失敗したリクエストのXエラー:BadMatch

1つの物理モニターでミラーフェイクディスプレイを作成する必要があります。 fakexrandr をインストールしましたが、ラップトップの1366x768(max/preferred)モニターに2つの偽のディスプレイ(683x768)があります。

xrandr --output eDP1~1 --same-as eDP1 --verboseコマンドを実行すると、次のエラーが表示されます。

enter image description here

*また、xrandr --fb 683x768も同じエラーを出力しています。

Phillip Berndtfakexrandr の所有者/作成者)は、実際に設定を適用するには、グラフィックスドライバーに。」 in この問題 。しかし、それは私にとって満足のいく答えではありませんでした。

この問題を追跡するために、2つの物理的なモニター設定でxrandr --verboseの出力を記録しました。 このリポジトリ のコミットをたどって、xrandr --verboseの出力の動作を確認できます。

  • これを行った後、xrandr --output eDP1~1 --same-as eDP1コマンドがcurrent 683x768Screen 0:に割り当てようとしていることに気付きました。しかし、ラップトップのグラフィックドライバーまたは物理モニターには、683x768出力オプション/サポートがありません。これが問題になる可能性があります(この段落の正確性は定かではありませんが、完全に間違っている可能性があります)。

全体として:スクリーンショットのこのエラーの実際の理由とこの問題の回避策は何ですか?

1
mertyildiran

RandRは、サーバーのクライアント(=アプリケーション)とグラフィックスドライバー間で出力の構成を通信するために使用されるX11サーバーの拡張機能です。ほとんどのアプリケーションは、実際にプロトコル自体を話すのではなく、代わりにlibXrandRというライブラリを使用します。 FakeXRandRは、このライブラリをグラフィックドライバーにまだ構成を要求するライブラリに置き換えますが、実際に存在するものとはまったく異なる構成が存在することをアプリケーションがだまして信じるように結果をいじります。偽の出力の1つを変更しようとすると必然的にエラーが発生するため、偽の出力の構成要求を元の物理出力に対する変更要求に置き換えることにより、最悪の問題を軽減しようとします。しかし、もちろん、偽の出力にのみ存在する解像度を適用しようとすると、失敗する可能性があります。

良い例えは、時速50キロを運転できるかなり古い車がある場合です。 100 km/hを運転できるようにする必要がある通りを運転したいとします。 FakeXRandRが追求する解決策は、実際に50を運転しているときに針が180 kphを示すように、タコメーターの数字を置き換えることです。交通管制で停止している場合、 180、だから私は大丈夫」と彼はおそらくこれを受け入れるでしょう。ただし、ダッシュボードに印刷された数字ではなく、エンジンを交換する必要があるため、実際にはまだ高速で運転できません。

tl; dr:FakeXRandRはあなたのタスクにとって間違ったツールです。

RandRレベルでこれを本当に行う必要がある場合は、X11とカーネルコードの両方でグラフィックドライバーにパッチを適用する必要があります。 FakeXRandrの別のバグレポートの参照先についていくつかのヒットを書きました 。より簡単な解決策は、画面の右半分を左にミラーリングするだけの場合、 Compiz などの高度な合成ウィンドウマネージャーを使用することです。合成マネージャーは、アプリケーションウィンドウと実際に表示されるものの間にリダイレクトレイヤーを追加します。これにより、この場合、最初に出力の左側に、次に右側に各ウィンドウを2回描画できます。出力を効果的に複製します。このために利用可能なプラグインが既にあります(特にすべてのcompizパッケージ、特にcompizconfig-settings-manager、ccsmをインストールし、必要なものを検索します)、または少なくともあまり努力せずに、あなたが望むことをするものを書くことが可能です。

1
Phillip