Files
Ertuğrul Erata db4f70f2c6 foryali first commit
works continue..
2017-03-05 21:42:13 +03:00

223 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
import os
import comar
from pardus.sysutils import *
from zorg.config import *
from zorg.consts import *
from zorg.probe import *
from zorg.utils import *
kernel_module_file = os.path.join(config_dir, "kernel_module")
def getDevice():
bus = configuredBus()
if not bus:
return None
return getDeviceInfo(bus)
def getDeviceOutput(output):
dev = getDevice()
if not dev:
return None, None
if output not in dev.outputs:
dev.outputs[output] = Output(output)
return dev, dev.outputs[output]
# Model methods
def ready(boot):
opts = {}
if boot:
opts = get_kernel_option("xorg")
if "keymap" in opts:
keymap = opts["keymap"].split("/", 1)
setKeymap(*keymap)
if "safe" in opts:
return False
driver = opts.get("driver")
if driver or "probe" in opts:
return initialConfig(driver)
busId = configuredBus()
if not busId:
return initialConfig()
if boot:
# Check if the active card is changed
try:
device = getDeviceInfo(busId)
except IOError:
# Device is not present on specified bus.
# Check if the new device is configured before.
newBus = getPrimaryCard()
if newBus:
device = getDeviceInfo(VideoDevice(newBus).bus_id)
if device and not device.isChanged():
# Yes, it is configured before.
# Reenable driver and write xorg.conf.
device.enableDriver()
saveXorgConfig(device)
else:
# This is a different card.
return initialConfig()
else:
# No card is present. Return True in order to
# start with a manually edited xorg.conf.
return True
else:
if not device or device.isChanged():
return initialConfig()
# Check kernel module. Later, this should be done
# with Xorg.Driver.ready method.
if os.path.exists(kernel_module_file):
kernelModule = file(kernel_module_file).read()
if run("/sbin/modprobe", "-i", kernelModule) and kernelModule != "fglrx":
return False
return True
def initialConfig(preferredDriver=None):
bus = getPrimaryCard()
if bus:
device = VideoDevice(bus)
else:
# This machine might be a terminal server with no video cards.
# We start X and leave the decision to the user.
log_debug("No video card found.")
return True
if preferredDriver is None:
preferredDriver = device.preferredDriver()
device.setDriver(preferredDriver)
saveDeviceInfo(device)
saveXorgConfig(device)
return True
def safeConfig():
bus = getPrimaryCard()
if bus:
device = VideoDevice(bus)
else:
# See the comment in initialConfig
return True
device.setDriver("vesa")
device.depth = 16
device.outputs["default"] = Output("default")
device.monitors["default"] = Monitor()
saveDeviceInfo(device)
saveXorgConfig(device)
return True
# FIXME Confusing method name
def activeDeviceID():
return configuredBus()
def listDrivers():
drivers = listAvailableDrivers()
link = comar.Link()
packages = list(link.Xorg.Driver)
for package in packages:
try:
info = link.Xorg.Driver[package].getInfo()
except dbus.DBusException:
continue
alias = str(info["alias"])
driver = str(info["xorg-module"])
drivers.append(alias)
if driver in drivers:
drivers.remove(driver)
return sorted(drivers)
def setDriver(driver):
dev = getDevice()
if dev:
dev.setDriver(driver)
saveDeviceInfo(dev)
def setDepth(depth):
dev = getDevice()
if dev:
dev.depth = depth
saveDeviceInfo(dev)
def setOutput(output, enabled, ignored):
dev, out = getDeviceOutput(output)
if dev:
out.setEnabled(enabled)
out.setIgnored(ignored)
saveDeviceInfo(dev)
def setMode(output, resolution, rate):
dev, out = getDeviceOutput(output)
if dev:
out.setMode(resolution, rate)
saveDeviceInfo(dev)
def setOrientation(output, rotation, reflection):
dev, out = getDeviceOutput(output)
if dev:
out.setOrientation(rotation, reflection)
saveDeviceInfo(dev)
def setPosition(output, position, arg):
dev, out = getDeviceOutput(output)
if dev:
out.setPosition(position, arg)
saveDeviceInfo(dev)
def setMonitor(output, vendor, model, horizSync, vertRefresh):
dev, out = getDeviceOutput(output)
if dev:
if model:
mon = Monitor()
mon.vendor = vendor
mon.model = model
mon.hsync = horizSync
mon.vref = vertRefresh
dev.monitors[output] = mon
elif output in dev.monitors:
del dev.monitors[output]
else:
return
saveDeviceInfo(dev)
def syncConfigs():
dev = getDevice()
if dev:
saveXorgConfig(dev)
def setKeymap(layout, variant=""):
saveKeymap(layout, variant)