566
591
except Exception:
567
592
syslog.syslog(syslog.LOG_ERR, 'Unable to determine the model from DMI')
594
if 'stderr' in kwargs:
595
kwargs['stderr'].close()
570
def set_indicator_keymaps(locale):
572
warnings.warn('set_indicator_keymaps: this function currently does not work')
598
def set_indicator_keymaps(lang):
577
from gi.repository import Gdk
578
from ubiquity import gconftool
580
# FIXME: Code below needs porting to gsettings (not done yet as the function is disabled)
600
from gi.repository import Xkl, GdkX11
601
# GdkX11.x11_get_default_xdisplay() segfaults if Gtk hasn't been
602
# imported; possibly finer-grained than this, but anything using this
603
# will already have imported Gtk anyway ...
604
from gi.repository import Gtk
605
from ubiquity import gsettings
581
610
xpath = "//iso_639_3_entry[@part1_code='%s']"
582
gconf_key = '/desktop/gnome/peripherals/keyboard/kbd/layouts'
611
gsettings_key = ['org.gnome.libgnomekbd.keyboard','layouts']
612
lang = lang.split('_')[0]
615
# Map inspired from that of gfxboot-theme-ubuntu that's itself
616
# based on console-setup's. This one has been restricted to
617
# language => keyboard layout not locale => keyboard layout as
618
# we don't actually know the exact locale
644
'''Convert a zero-terminated byte array to a proper str'''
646
return s[:i].decode()
584
648
def process_variant(*args):
585
if hasattr(args[2], 'get_name'):
586
variants.append('%s\t%s' % (args[1].get_name(), args[2].get_name()))
588
variants.append(args[1].get_name())
590
lang = locale.split('_')[0]
649
if hasattr(args[2], 'name'):
650
variants.append('%s\t%s' % (item_str(args[1].name), item_str(args[2].name)))
652
variants.append(item_str(args[1].name))
654
def restrict_list(variants):
657
# Start by looking by an explicit default layout in the keymap
658
if lang in default_keymap:
659
if default_keymap[lang] in variants:
660
variants.remove(default_keymap[lang])
661
new_variants.append(default_keymap[lang])
663
tab_keymap = default_keymap[lang].replace('_', '\t')
664
if tab_keymap in variants:
665
variants.remove(tab_keymap)
666
new_variants.append(tab_keymap)
668
# Prioritize the layout matching the language (if any)
670
variants.remove(lang)
671
new_variants.append(lang)
673
# Uniquify our list (just in case)
674
variants = list(set(variants))
676
if len(variants) > 4:
677
# We have a problem, X only supports 4
679
# Add as many entry as we can that are layouts without variant
680
country_variants = sorted([entry for entry in variants if '\t' not in entry])
681
for entry in country_variants[:4-len(new_variants)]:
682
new_variants.append(entry)
683
variants.remove(entry)
685
if len(new_variants) < 4:
686
# We can add some more
687
simple_variants = sorted([entry for entry in variants if '_' not in entry])
688
for entry in simple_variants[:4-len(new_variants)]:
689
new_variants.append(entry)
690
variants.remove(entry)
692
if len(new_variants) < 4:
693
# Now just add anything left
694
for entry in variants[:4-len(new_variants)]:
695
new_variants.append(entry)
696
variants.remove(entry)
698
new_variants += list(variants)
700
# gsettings doesn't understand utf8
701
new_variants = [str(variant) for variant in new_variants]
705
def call_setxkbmap(variants):
709
for entry in variants:
710
fields = entry.split('\t')
712
kb_layouts.append(fields[0])
713
kb_variants.append(fields[1])
715
kb_layouts.append(fields[0])
716
kb_variants.append("")
718
execute("setxkbmap", "-layout", ",".join(kb_layouts), "-variant", ",".join(kb_variants))
591
720
fp = libxml2.parseFile('/usr/share/xml/iso-codes/iso_639_3.xml')
592
721
context = fp.xpathNewContext()
593
722
nodes = context.xpathEvalExpression(xpath % lang)
723
display = GdkX11.x11_get_default_xdisplay()
724
engine = Xkl.Engine.get_instance(display)
595
code = nodes[0].prop('part2_code')
596
display = Gdk.Display.get_default()
597
engine = xklavier.Engine(display)
598
configreg = xklavier.ConfigRegistry(engine)
726
configreg = Xkl.ConfigRegistry.get_instance(engine)
599
727
configreg.load(False)
600
configreg.foreach_language_variant(code, process_variant)
602
gconftool.set_list(gconf_key, 'string', variants)
604
# Use the system default if no other keymaps can be determined.
605
gconftool.set_list(gconf_key, 'string', '')
729
# Apparently part2_code doesn't always work (fails with French)
730
for prop in ('part2_code', 'id', 'part1_code'):
731
if nodes[0].hasProp(prop):
732
code = nodes[0].prop(prop)
733
configreg.foreach_language_variant(code, process_variant, None)
735
restricted_variants = restrict_list(variants)
736
call_setxkbmap(restricted_variants)
737
gsettings.set_list(gsettings_key[0], gsettings_key[1], restricted_variants)
740
# Use the system default if no other keymaps can be determined.
741
gsettings.set_list(gsettings_key[0], gsettings_key[1], [])
607
745
NM = 'org.freedesktop.NetworkManager'
608
746
NM_STATE_CONNECTED_GLOBAL = 70
630
768
func(state == NM_STATE_CONNECTED_GLOBAL)
631
769
bus = dbus.SystemBus()
632
770
bus.add_signal_receiver(connection_cb, 'StateChanged', NM, NM)
633
func(has_connection())
772
func(has_connection())
773
except dbus.DBusException:
774
# We can't talk to NM, so no idea. Wild guess: we're connected
775
# using ssh with X forwarding, and are therefore connected. This
776
# allows us to proceed with a minimum of complaint.
781
return min_install_size
783
# Fallback size to 5 GB
784
size = 5 * 1024 * 1024 * 1024
786
# Maximal size to 8 GB
787
max_size = 8 * 1024 * 1024 * 1024
790
with open('/cdrom/casper/filesystem.size') as fp:
791
size = int(fp.readline())
795
# TODO substitute into the template for the state box.
796
min_disk_size = size * 2 # fudge factor.
798
# Set minimum size to 8GB if current minimum size is larger
799
# than 8GB and we still have an extra 20% of free space
800
if min_disk_size > max_size and size * 1.2 < max_size:
801
min_disk_size = max_size
804
min_install_size = None
635
806
# vim:ai:et:sts=4:tw=80:sw=4: