web-dev-qa-db-ja.com

Linux:コマンドラインからプライマリディスプレイ(nvidia)を設定する

これは可能ですか?

通常、私はdisperを使用して外部モニターを有効にしますが、2番目のモニターを強制的にプライマリにすることはできないと思います。 http://willem.engen.nl/projects/disper/

Nvidia-controlソースに含まれているnv-control-dpyをいじってみましたが、その方法はまだわかりません。入手方法: http://ubuntuforums.org/showthread.php?t=922956

編集

これはラップトップで、仕事に行くときに外部のhdmiディスプレイを接続します。 dipser -eは私のためにデスクトップを拡張しますが、ラップトップはプライマリデスクトップのままです(パネルなどを保持します)。 nvidia-settingsはプライマリモニターを設定できますが、CLIを使用したいと思います。

6
Joernsn

おそらく私は2.3バージョンを持っているので、nvidia-setting v1.0を使用したubuntu10.04で、あなたが言っていることを正確に行うことに成功しました


バグ修正後:

これはかつて大きなものとしてリストされています:

https://bugs.launchpad.net/disper/+bug/321288

バージョン2.1では、20010-04で要求したとおりに機能するはずであり、「バグ修正」は2009-02-16で確認されました。

私が持っていたもの

を使用して:

disper -l

そこに私のデバイスがあったのを見ました:

  • DFP-0:LGD(ラップトップディスプレイ)
  • CRT-0:Samsung SyncMaster(外部モニター)

(外部デバイスはxrandrでクエリしても表示されません)

私が欲しかったものとその方法

ラップトップは右側にあり、モニターは左側にあります。私はラップトップをSamsungから拡張したかったので、ラップトップを物理的に上に揃えて、論理的にも上に揃えて、それらを持っていたいと思いました独自の最大解像度:

disper -d CRT-0,DFP-0 -r auto -e -t right

これは次のように読み取る必要があります:(-d)最初にSyncMasterで動作し、次にラップトップ液晶で動作します(-r)自動を検討します解像度、(-e)2番目の表示を拡張します[-dが表示順序を設定するため、ここで2番目はラップトップです]、(-t)2番目のディスプレイ[ラップトップ]を最初のディスプレイの右側に拡張します。

グーグルを正しくそして最初に試す

非常にシンプルなnvidiaハッキングは必要ありません。それが役に立てば幸い。


乾杯

Splinux

3
splinux

私はnvidia-settingsソースをハッキングし、実用的な解決策を得ました:

これはUbuntuで行われますが、移植は難しくありません。

次のコマンドを実行します。

Sudo apt-get build-dep nvidia-settings
apt-get source nvidia-settings
cd nvidia-settings-195.36.08/src

「nvidia-settings.c」を編集し、main()を次のように置き換えます。

int main(int argc, char **argv)
{


    ConfigProperties conf;
    ParsedAttribute *p; 
    CtrlHandles *h; 
    char * target;

    /* initialize the parsed attribute list */

    p = nv_parsed_attribute_init();

    /* initialize the ConfigProperties */

    init_config_properties(&conf);

    /* allocate the CtrlHandles for this X screen */

    h = nv_alloc_ctrl_handles(":0.0");

    if (!h || !h->dpy) {
        return 1;
    }   

    /* Get target from command line */
    if(argc != 2){ 
            printf("Usage: %s PRIMARY_DISPLAY\n", argv[0]);
        printf("Example: %s  DFP-1\n");
        return 1;
    }   

    target = argv[1];

    int i;
    for (i = 0; i < h->targets[X_SCREEN_TARGET].n; i++) {
        if (h->targets[X_SCREEN_TARGET].t[i].h) {

            printf("Setting primary display: %s\n", target);

            NvCtrlSetStringAttribute(h->targets[X_SCREEN_TARGET].t[i].h, NV_CTRL_STRING_TWINVIEW_XINERAMA_INFO_ORDER, target, NULL);

            break;
        }   
    }   

    return 0;

} /* main() */

コンパイル:

cd ..
make

バイナリをパスに入れます:

Sudo cp nvidia-settings /usr/local/bin/setPrimaryDisplay

これを使って:

setPrimaryDisplay DFP-1
gnome-panel --replace 2>/dev/null &

ここで、DFP-1は目的のダイアプレイディスプレイの名前です。 Gnomeパネルが時代に追いついていないため、再起動する必要があります。

AMD64用にコンパイルされた私のバイナリはここからダウンロードできます: http://while1.no/files/setPrimaryDisplay

1
Joernsn

あまりにも明白で、使用したくないオプションかもしれませんが、BIOSの主要なオプションを変更するのはどうですか?

0
S.gfx

xrandrをいじってみることができます。 commandlinefuには素晴らしい collection のxrandrベースのスクリプトがあります。

0
Ivan Petrushev