You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xorg-x11-drv-nvidia/nvidia-config-display

147 lines
5.6 KiB

#!/usr/bin/python -tt
# -*- coding: UTF-8 -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 only
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Copyright 2003, 2004 Peter Backlund
# Copyright 2004 Thorsten Leemhuis
# Copyright 2006 Van Assche Alphonse
# Copyright 2006, 2007 Stewart Adam
import string
import os
import sys
from livnaConfigDisplay.const import *
from livnaConfigDisplay.const import _
import livnaConfigDisplay.ConfigDisplay
from livnaConfigDisplay.GlxConfig import *
from livnaConfigDisplay import Utils
from livnaConfigDisplay.ConfigFile import ConfigFile
class nvidiaConfigDisplay(GlxConfig):
def __init__(self):
GlxConfig.__init__(self)
self.vendor = 'nvidia'
self.majorVendor = Utils.getMajorVendor()
if self.vendor != Utils.getVendor():
print _('The initscript and installed driver vendors do not match!')
sys.exit(1)
self.ldconf = LD_CONF_FILE % (self.vendor)
try:
self.doAllBackups()
except livnaConfigDisplayError, (bkupErrMsg):
print bkupErrMsg
sys.exit(1)
self.xconfig, self.xconfigpath = self.loadXconfig()
self.config = ConfigFile(STATUS_FILE)
self.TOP_MOD_DIR = self.getModTopDir()
# finally, run arg checks.
self.run()
def enable(self, isAutoConfigure = True):
# Backup the file before make any change.
currentDriver = self.getDriver()
# Already enabled?
if currentDriver == self.majorVendor:
print _('Driver already enabled.')
return
# nVidia modules
self.addModulePath("/extensions/nvidia", self.TOP_MOD_DIR)
# 'remembering' magic's in here.
self.config.setOldDriver(currentDriver)
#currentDriver = self.config.getOldDriver()
self.toggleDriver(currentDriver, self.majorVendor)
# Disable dri and GLcore modules - these are no
self.removeModule("dri")
self.removeModule("GLcore")
# Add glx/dbe/extmod modules when modules section exists
if self.xconfig.modules:
for module in ["glx", "dbe", "extmod"]:
if self.onlyHasModule(module):
self.removeModule(module)
break
else:
self.addModule(module)
# Problems with Compiz without these. - not needed since 195.xxx
#self.addOption(self.majorVendor,"AddARGBGLXVisuals", "True")
#self.addOption(self.majorVendor,"DisableGLXRootClipping", "True")
Utils.writeXorgConf(self.xconfig, self.xconfigpath)
# We have to read saved status file to restore the Xorg configuration.
self.restoreconf()
def disable(self, isAutoConfigure = True):
self.removeModulePath("/extensions/nvidia", self.TOP_MOD_DIR)
# Check if it's already disabled
if self.getDriver() != self.majorVendor:
print _('Driver already disabled.')
return
# Backup the file before make any change.
prevDriver = self.config.getOldDriver()
if prevDriver == self.majorVendor:
print _('Will not allow reverting from driver \'%s\' to \'%s\'.') % (self.vendor, self.vendor)
print _('Using the \'nouveau\' driver instead.')
prevDriver = "nouveau"
self.config.setOldDriver("nouveau")
self.removeOption(self.majorVendor,"AddARGBGLXVisuals")
self.removeOption(self.majorVendor,"DisableGLXRootClipping")
self.toggleDriver(self.majorVendor, prevDriver)
Utils.writeXorgConf(self.xconfig, self.xconfigpath)
# We have to save the status file so it can be restored later
self.storeconf()
# And return to the Fedora default.
self.enableAiglx()
def printUsage(self):
print _("Usage: ") + self.vendor + _("-config-display [ enable|disable ]")
def run(self):
# Check number of arguments
# arg = action
if len(sys.argv) == 2:
arg = sys.argv[1]
else:
print _('Wrong number of arguments')
self.printUsage()
sys.exit(1)
# Check value of argument
if arg.lower() != "enable" and arg.lower() != "disable":
print _('Invalid command: %s') % arg.lower()
self.printUsage()
sys.exit(1)
try:
if arg == "enable":
if self.getActive():
self.enable()
else:
print _('livna-config-display\'s `active\' state is False - Exiting')
elif arg == "disable":
if self.getActive():
self.disable()
except:
raise # Uncomment me to show the real error
print MSG_CONF_APPLY_ERROR
try:
self.doAllRestores()
sys.exit(1)
except livnaConfigDisplayError, (bkupErrMsg):
#raise # Uncomment me to show the real error
print MSG_CONF_RESTORE_ERROR + '\n' + MSG_TRACEBACK % (str(errMsg)) + '\n\n' + str(bkupErrMsg)
sys.exit(1)
app = nvidiaConfigDisplay()