|
Server IP : 128.199.20.84 / Your IP : 172.70.80.30 Web Server : Apache/2.4.41 (Ubuntu) System : Linux competent-maruti 5.4.0-128-generic #144-Ubuntu SMP Tue Sep 20 11:00:04 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.0.20 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF Directory (0755) : /lib/python2.7/../python3.8/pydoc_data/../../language-selector/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
#!/usr/bin/python3
import dbus
import dbus.mainloop.glib
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
import dbus.service
from gi.repository import GObject
import logging
import re
import subprocess
import sys
import LanguageSelector.macros
from LanguageSelector.utils import *
DATADIR="/usr/share/language-selector/"
class LanguageSelectorServer(dbus.service.Object):
def __init__(self, bus=dbus.SystemBus(), datadir=DATADIR):
bus_name = dbus.service.BusName('com.ubuntu.LanguageSelector',
bus=bus)
dbus.service.Object.__init__(self, bus_name, '/')
self._datadir = "/usr/share/language-selector/"
self._re_locale = re.compile(r'^[\w.@:-]+$')
def _authWithPolicyKit(self, sender, connection, priv):
logging.debug("_authWithPolicyKit")
system_bus = dbus.SystemBus()
obj = system_bus.get_object("org.freedesktop.PolicyKit1",
"/org/freedesktop/PolicyKit1/Authority",
"org.freedesktop.PolicyKit1.Authority")
policykit = dbus.Interface(obj, "org.freedesktop.PolicyKit1.Authority")
subject = ('system-bus-name',
{ 'name': dbus.String(sender, variant_level = 1) }
)
details = { '' : '' }
flags = dbus.UInt32(1) # AllowUserInteraction = 0x00000001
cancel_id = ''
(ok, notused, details) = policykit.CheckAuthorization(
subject, priv, details, flags, cancel_id)
return ok
@dbus.service.method(dbus_interface='com.ubuntu.LanguageSelector',
in_signature="s",
out_signature="b",
connection_keyword='connection',
sender_keyword='sender')
def SetSystemDefaultLanguageEnv(self, sysLanguage, sender, connection):
""" sysLanguage - the default system LANGUAGE and LANG """
logging.debug("SetSystemDefaultLanguage")
if not self._re_locale.search(sysLanguage):
logging.error('SetSystemDefaultLanguage: Invalid locale "%s", rejecting', sysLanguage)
return False
if not self._authWithPolicyKit(sender, connection, "com.ubuntu.languageselector.setsystemdefaultlanguage"):
return False
conffiles = ["/etc/default/locale"]
findString = "LANGUAGE="
setString = "LANGUAGE=\"%s\"\n" % sysLanguage
find_string_and_replace(findString, setString, conffiles)
defaultLanguageLocale = language2locale(sysLanguage)
findString = "LANG="
setString = "LANG=\"%s\"\n" % defaultLanguageLocale
find_string_and_replace(findString, setString, conffiles)
return True
@dbus.service.method(dbus_interface='com.ubuntu.LanguageSelector',
in_signature="s",
out_signature="b",
connection_keyword='connection',
sender_keyword='sender')
def SetSystemDefaultFormatsEnv(self, sysFormats, sender, connection):
""" sysFormats: various LC_* variables (de_DE.UTF-8) """
logging.debug("SetSystemDefaultFormatsEnv")
if not self._re_locale.search(sysFormats):
logging.error('SetSystemDefaultFormatsEnv: Invalid locale "%s", rejecting', sysFormats)
return False
if not self._authWithPolicyKit(sender, connection, "com.ubuntu.languageselector.setsystemdefaultlanguage"):
return False
conffiles = ["/etc/default/locale"]
macr = LanguageSelector.macros.LangpackMacros(self._datadir, sysFormats)
defaultFormatsLocale = macr['SYSLOCALE']
for var in 'LC_NUMERIC', 'LC_TIME', 'LC_MONETARY', 'LC_PAPER', 'LC_IDENTIFICATION', \
'LC_NAME', 'LC_ADDRESS', 'LC_TELEPHONE', 'LC_MEASUREMENT':
findString = "%s=" % var
setString = "%s=\"%s\"\n" % (var, defaultFormatsLocale)
find_string_and_replace(findString, setString, conffiles)
""" /etc/papersize ('a4' or 'letter') """
papersize = subprocess.check_output(
['/usr/share/language-tools/locale2papersize', defaultFormatsLocale],
universal_newlines=True)
with open('/etc/papersize', 'w') as f:
f.write(papersize)
return True
if __name__ == "__main__":
# FIXME: use argparse
if len(sys.argv) > 1 and sys.argv[1] == "--debug":
logging.basicConfig(level=logging.DEBUG)
server = LanguageSelectorServer()
GObject.MainLoop().run()