|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21585/root/usr/lib64/python2.4/site-packages/rhpl/ |
Upload File : |
#
# keyboard.py - keyboard backend data object
#
# Brent Fox <bfox@redhat.com>
# Mike Fulbright <msf@redhat.com>
# Jeremy Katz <katzj@redhat.com>
#
# Copyright 2002 Red Hat, Inc.
#
# 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; either version 2 of the License, or
# (at your option) any later version.
#
# 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 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., 675 Mass Ave, Cambridge, MA 02139, USA.
#
import kudzu
import string
import os
import executil
from simpleconfig import SimpleConfigFile
import keyboard_models
class Keyboard(SimpleConfigFile):
def __init__(self):
self.type = "PC"
self.beenset = 0
self.info = {}
# default to us
self.info["KEYTABLE"] = "us"
list = kudzu.probe(kudzu.CLASS_KEYBOARD, kudzu.BUS_UNSPEC,
kudzu.PROBE_ONE)
if list:
(device, module, desc) = list[0]
if desc.startswith("Serial console"):
self.type = "Serial"
# XXX no sparc handling here, but we'll pretend for the time being
elif desc.startswith("Sun Type"):
self.type = "Sun"
if self.type == "Sun":
self.info["KEYBOARDTYPE"] = "sun"
elif self.type != "Serial":
self.info["KEYBOARDTYPE"] = "pc"
self._mods = keyboard_models.KeyboardModels()
def _get_models(self):
return self._mods.get_models()
modelDict = property(_get_models)
def set(self, keytable):
if self.type != "Serial":
self.info["KEYTABLE"] = keytable
def get(self):
return self.info["KEYTABLE"]
def getKeymapName(self):
kbd = self.modelDict[self.get()]
if not kbd:
return ""
(name, layout, model, variant, options) = kbd
return name
def __getitem__(self, item):
table = self.info["KEYTABLE"]
if not self.modelDict.has_key(table):
raise KeyError, "No such keyboard type %s" % (table,)
kb = self.modelDict[table]
if item == "rules":
return "xorg"
elif item == "model":
return kb[2]
elif item == "layout":
return kb[1]
elif item == "variant":
return kb[3]
elif item == "options":
return kb[4]
elif item == "name":
return kb[0]
elif item == "keytable":
return table
else:
raise KeyError, item
def read(self, instPath = "/"):
SimpleConfigFile.read(self, instPath + "/etc/sysconfig/keyboard")
self.beenset = 1
def write(self, instPath = "/"):
SimpleConfigFile.write(self, instPath + "/etc/sysconfig/keyboard")
try:
os.unlink(instPath + "/etc/sysconfig/console/default.kmap")
except:
pass
def writeKS(self, f):
f.write("keyboard %s\n" % (self.get(),))
def activate(self):
# XXX do isys.loadkeys once its in rhpl
console_kbd = self.get()
if not console_kbd:
return
# Call loadkeys to change the console keymap
if os.access("/bin/loadkeys", os.X_OK):
command = "/bin/loadkeys"
elif os.access("/usr/bin/loadkeys", os.X_OK):
command = "/usr/bin/loadkeys"
else:
command = "/bin/loadkeys"
argv = [ command, console_kbd ]
if os.access(argv[0], os.X_OK) == 1:
executil.execWithRedirect(argv[0], argv)
kbd = self.modelDict[console_kbd]
if not kbd:
return
(name, layout, model, variant, options) = kbd
# only set the X keyboard map if running X
if not os.environ.has_key("DISPLAY"):
return
argv = [ "/usr/bin/setxkbmap", "-layout", layout, "-model", model ]
# XXX setxkbmap(1) needs one -option flag for each option
if options:
argv = argv + [ "-option", options ]
if variant:
argv = argv + [ "-variant", variant ]
if os.access(argv[0], os.X_OK) == 1:
executil.execWithRedirect(argv[0], argv, searchPath = 1)