NVIDIA X Server Settings lost on every reboot

I am running a GeForce GTX 770 on a Z87 Gigabyte mobo and dual-boot Windows 8.1 Pro and Ubuntu 12.04.3 LTS. The setup runs smoothly overall except for when it comes to video and 3D performance in Ubuntu. I had the infamous flickering issue at one point and found a way to fix it. It has to do with the NVidia card going into low-power mode and then videos and 3D effects suffer from tearing and stuttering. The fix is to go to nvidia-settings and change the power-mode from 'Auto' to 'Prefer Maximum Performance'. The problem is this only works until I reboot. After the reboot the setting is cleared and the problems still persist, so I have to manually set it again for the current session. I tried gksu-ing and setting it, but it didn't work. I tried to edit the etc/X11/xorg.conf, but it's empty - there are zero lines in that file... I read all the related articles, but mainly people complain about brightness being reset or dual-monitor configs, which solutions involve some specific app that doesn't help me in any way.

TL;DR: NVidia settings are reset after reboot and tried everything I could find on the Internet to no good.

If someone knows what to do in this situation, please share!

Thank you!

EDIT [1]: I did some further digging and it seems there is no obvious or safe solution. Some people have tried to set the performance level manually, but report it's unsafe and may kill the GPU. There is still hope though. I think this could be done through the NVidia profiles option provided from nvidia-settings. The problem is that one needs to know the key in question and the value this key accepts.

I could have put a screenshot here, but I need rep => 10...

I couldn't find a list of the possible keys nor any key values... No luck I guess.

Can someone provide a link or list some useful ones?

Thanks!

EDIT [2]: Finally! Thanks to everybody for the help! I found the solution with the help of vegard torvund and this thread. And thanks to the Ubuntu Google+ Community for spreading the word!


  1. Create a xorg.conf file by:

    sudo nvidia-xconfig
    
  2. Look for the Section "Device" part in the xorg.conf file And add this line inside the section:

    Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322"
    

Save and reboot your machine.

PS. If you add more parameters, add ; after 0x3322


From the official user guide:

"4. Loading Settings Automatically

The NVIDIA X driver does not preserve values set with nvidia-settings
between runs of the X server (or even between logging in and logging
out of X, with xdm, gdm, or kdm).  This is intentional, because
different users may have different preferences, thus these settings
are stored on a per user basis in a configuration file stored in
the user's home directory.

The configuration file is named "~/.nvidia-settings-rc".  You can
specify a different configuration file name with the "--config"
commandline option.

After you have run nvidia-settings once and have generated a
configuration file, you can then run:

    nvidia-settings --load-config-only

at any time in the future to upload these settings to the X
server again.  For example, you might place the above command in
your ~/.xinitrc file so that your settings are applied automatically
when you log in to X.

Your .xinitrc file, which controls what X applications should
be started when you log into X (or startx), might look something
like this:

    nvidia-settings --load-config-only &
    xterm &
    evilwm

or:

    nvidia-settings --load-config-only &
    gnome-session

If you do not already have an ~/.xinitrc file, then chances are that
xinit is using a system-wide xinitrc file.  This system wide file
is typically here:

    /etc/X11/xinit/xinitrc

To use it, but also have nvidia-settings upload your settings,
you could create an ~/.xinitrc with the contents:

    nvidia-settings --load-config-only &
    . /etc/X11/xinit/xinitrc

System administrators may choose to place the nvidia-settings load
command directly in the system xinitrc script.

Please see the xinit(1) manpage for further details of configuring
your ~/.xinitrc file.

"


What you can do is create a script like the following and run it on startup.

#!/bin/bash
nvidia-settings --assign CurrentMetaMode=<display_settings>

You replace <display_settings> with your display-settings. The display-settings could look like this:

"DVI-D-0: nvidia-auto-select +0+0, DP-0.1: nvidia-auto-select +1920+0, DP-0.8: nvidia-auto-select +0+0, HDMI-0: nvidia-auto-select +1920+0" 

You get the display settings out of the 'X Configuration File'.

You can run it on startup via the program 'Startup Applications Preferences'.

You can launch 'Startup Applications Preferences' via gnome-session-properties in the terminal.


On Linux Mint 18 Cinnamon go to the little config app named monitors. When pressing "apply" a file ~/.config/monitors.xml is saved which serves the same purpose than the xfce displays.xml - it saves all those settings, that in nvidia settings are not persistent. You have to play around to change something (to trigger the availability of the apply button) if you happen to have configured your display layout in NVIDIA graphic settings panel. I did this AND added the load-settings from above to xinitrc.

I wil check if my window-reordering problem after the screen lock was active is gone now All windows reordered to main monitor