From 027f18f98d12d4bff48d444d53cdca566c23a023 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 27 Jun 2024 17:52:36 +0600 Subject: [PATCH] Improvements, WIP --- source/ubinstall-gtk.c | 126 ++++++++++++++++++++++++++++++----- source/ubinstall-gtk.h | 53 +++++++++++++++ source/ubl-strings.h | 7 +- ubinstall-gtk-keyboard.glade | 2 +- ubinstall-gtk.glade | 57 +++------------- 5 files changed, 180 insertions(+), 65 deletions(-) diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index d0f76aa..c3d1e8e 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -36,9 +36,21 @@ double yon_size_long_convert_automatic(unsigned long bytes, char *size){ // standard functions -void on_keyboard_accept(); -void on_keyboard_accept(){ +void on_keyboard_accept(GtkWidget *self,main_window *widgets); +void on_keyboard_accept(GtkWidget *self,main_window *widgets){ + gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter)); + on_subwindow_close(self); +} +void on_layout_toggle(GtkCellRendererToggle*, gchar* path, ubinstall_keyboard_window *window); +void on_layout_toggle(GtkCellRendererToggle*, gchar* path, ubinstall_keyboard_window *window){ + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->LayoutsTree)); + GtkTreeIter iter; + if (gtk_tree_model_get_iter_from_string(model,&iter,path)){ + int status=0; + gtk_tree_model_get(model,&iter,3,&status,-1); + gtk_tree_store_set(GTK_TREE_STORE(model),&iter,3,!status,-1); + } } ubinstall_keyboard_window *yon_ubinstall_keyboard_new(){ @@ -50,9 +62,9 @@ ubinstall_keyboard_window *yon_ubinstall_keyboard_new(){ window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton"); window->LayoutsTree=yon_gtk_builder_get_widget(builder,"LayoutsTree"); + window->ActiveToggle = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ActiveToggle")); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - // g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(),NULL); return window; } @@ -61,12 +73,10 @@ void on_keyboard_clicked (GtkWidget *, main_window *widgets); void on_keyboard_clicked (GtkWidget *, main_window *widgets){ ubinstall_keyboard_window *window = yon_ubinstall_keyboard_new(); yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),KEYBOARD_TITLE_LABEL,icon_path,"keyboard-window"); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); gtk_tree_view_set_model(GTK_TREE_VIEW(window->LayoutsTree),GTK_TREE_MODEL(widgets->LayoutList)); - g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_keyboard_accept),dict); + g_signal_connect(G_OBJECT(window->ActiveToggle),"toggled",G_CALLBACK(on_layout_toggle),window); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_keyboard_accept),widgets); gtk_widget_show(window->MainWindow); } @@ -261,6 +271,7 @@ void *yon_installation_start(){ void *yon_installation_progress_update(void *data); void *yon_installation_progress_update(void *data){ + sleep(1); main_window *widgets = (main_window*)data; FILE *file = fopen(progress_path,"r"); char *current = g_malloc0(4096); @@ -304,7 +315,7 @@ void on_page_changed(GtkWidget *,GtkWidget *,int page, main_window *widgets){ gtk_widget_set_sensitive(widgets->BackButton,0); g_thread_join(main_config.config_save_thread); if (!main_config.install_thread) - main_config.install_thread = g_thread_new("InstallThread",(GThreadFunc)on_config_save,NULL); + main_config.install_thread = g_thread_new("InstallThread",(GThreadFunc)yon_installation_start,NULL); if (!main_config.install_thread) main_config.progress_thread = g_thread_new("ProgressThread",(GThreadFunc)yon_installation_progress_update,widgets); @@ -380,6 +391,21 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ yon_ubl_status_highlight_incorrect(widgets->LanguagesCombo); return; } + char *region = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo)); + char *zone = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo)); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguagesFilter); + char *languages = ""; + char *lang_code=NULL; + for_iter(model,&iter){ + gtk_tree_model_get(model,&iter,1,&lang_code,-1); + yon_char_unite(languages,",",lang_code,NULL); + } + char *language = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LanguagesCombo)); + yon_config_register(locale_parameter,locale_parameter_command,languages); + yon_config_register(lang_parameter,lang_parameter_command,language); + yon_config_register(zone_parameter,zone_parameter_command,yon_char_unite(region,"/",zone,NULL)); + gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page+1); }break; case YON_PAGE_KEYBOARD: { //keyboard @@ -392,6 +418,23 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->LayoutTree)); } } + char *layouts_list=""; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->DefaultLayoutRadio))){ + GtkTreeModel *layouts_model=NULL; + GtkTreeIter iter; + char *cur_layout=NULL; + for_iter(layouts_model,&iter){ + gtk_tree_model_get(layouts_model,&iter,0,&cur_layout,-1); + layouts_list = yon_char_unite(layouts_list,",",cur_layout,NULL); + } + } else { + yon_config_remove_by_key(xkblayout_parameter); + } + char *model = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo))?(char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)):""; + // char *layout_switch; + yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,model); + yon_config_register(locale_parameter,locale_parameter_command,layouts_list); + gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page+1); } break; default:{ // all other pages @@ -470,7 +513,47 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ config_str parameters = yon_config_get_all(&size); main_config.config_save_thread = g_thread_new("savethread",(GThreadFunc)on_config_save,save_config_command(yon_char_parsed_to_string(parameters,size," "))); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION); - } + }break; + case YON_PAGE_USERS:{ + if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->UserNameEntry); + return; + } else if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->LoginEntry)))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->UserNameEntry); + return; + + } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->PasswordCombo))==1&&yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->PasswordEntry)))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->UserNameEntry); + return; + + } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->AdminPasswordCombo))==1&&yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AdminPasswordEntry)))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->UserNameEntry); + return; + + } else if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->HotnameEntry)))){ + + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->UserNameEntry); + return; + } + char *username = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + char *login = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + char *password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + char *hostname = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + char *autologin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AutologinCheck))?"yes":"no"; + yon_config_register(user_name_parameter,user_name_parameter_command,login); + yon_config_register(user_gecos_parameter,user_gecos_parameter_command,username); + yon_config_register(user_password_parameter,user_password_parameter_command,password); + yon_config_register(root_password_parameter,root_password_parameter_command,root_password); + yon_config_register(autologin_parameter,autologin_parameter_command,autologin); + yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,hostname); + yon_config_register(hostname_parameter,hostname_parameter_command,root_password); + }break; } } break; case -1: { // Previous @@ -502,15 +585,16 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ } } -void on_region_changed(GtkComboBox *self, main_window *widgets); -void on_region_changed(GtkComboBox *self, main_window *widgets){ - char *active = (char*)gtk_combo_box_get_active_id(self); +void on_region_changed(GtkComboBoxText *self, main_window *widgets); +void on_region_changed(GtkComboBoxText *self, main_window *widgets){ + char *active = (char*)gtk_combo_box_text_get_active_text(self); + active = yon_char_append("/usr/share/zoneinfo/",active); int size; gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo)); if (yon_file_is_directory(active)){ config_str parsed = yon_file_ls(active,&size); for (int i=0;iZoneCombo),_(parsed[i])); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->ZoneCombo),parsed[i],_(parsed[i])); } } } @@ -692,6 +776,7 @@ main_window *yon_main_window_complete(){ widgets->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList")); widgets->LanguagesFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"LanguagesFilter")); + widgets->LayoutsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"LayoutsFilter")); widgets->LayoutList = GTK_TREE_STORE(gtk_builder_get_object(builder,"LayoutList")); widgets->AdditionalSoftwareList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionalSoftwareList")); widgets->PartitionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PartitionsList")); @@ -713,9 +798,12 @@ main_window *yon_main_window_complete(){ g_signal_connect(G_OBJECT(widgets->SectionsToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationNearSysDevicesTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); + gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),3); g_signal_connect(G_OBJECT(widgets->LanguageCombo),"changed",G_CALLBACK(on_locale_changed),widgets); g_signal_connect(G_OBJECT(widgets->AdditionalSoftwareCell),"toggled",G_CALLBACK(on_additional_software_toggled),widgets); + + g_signal_connect(G_OBJECT(widgets->ManualLayoutRadio),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),gtk_widget_get_parent(gtk_widget_get_parent(widgets->AddButton))); // g_signal_connect(G_OBJECT(widgets->InstallationToggle),"toggled",G_CALLBACK(on_toggle_block),widgets); gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter),0); @@ -763,7 +851,7 @@ main_window *yon_main_window_complete(){ if (!strstr(parsed[i],".")&&strcmp(parsed[i],"posix")&&strcmp(parsed[i],"right")){ char *path = yon_char_append(zone_path,parsed[i]); if (yon_file_is_directory(path)){ - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->RegionCombo),path,_(parsed[i])); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->RegionCombo),parsed[i],_(parsed[i])); } free(path); } @@ -778,7 +866,7 @@ main_window *yon_main_window_complete(){ if (layout_size){ char *layout_id = yon_char_new(layout[0]); gtk_tree_store_append(widgets->LayoutList,&iter,NULL); - gtk_tree_store_set(widgets->LayoutList,&iter,0,layout[0],1,_(layout[1]),2,0,-1); + gtk_tree_store_set(widgets->LayoutList,&iter,0,layout[0],1,_(layout[1]),2,1,-1); yon_char_parsed_free(layout,layout_size); layout = yon_config_load(get_layouts_local_command(layout_id),&layout_size); for (int j=0;jAdditionalSoftwareList,&iter,0,1,1,module_parsed[0],3,module_parsed[1],-1); //2,module_parsed[2] } } + + config_str models = yon_config_load(get_models_command,&size); + for (int i=0;iKeyboardModelCombo),models[i],_(models[i+1])); + } + return widgets; } diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 8fbb7bc..abb7f75 100644 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -62,6 +62,10 @@ "/com/ublinux/images/slide-12.png", \ NULL +#define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}|^ {8,8}'|sed -e 's/ *//g' -e 's,,,g' -e 's/ *//g' -e 's,,,g'" + +#define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL)) + #define get_layouts_command "xkbcli list --load-exotic | awk \"layout && /description:/ {match(\\$0,/: *(.*)/,matches);description=matches[1];printf \\\"%s|%s\\n\\\",layout,description;layout=\\\"\\\"} /layout:/ {match(\\$0, /: *'([^']+)'/,matches);l=matches[1];if (layouts[l]) next;layout=layouts[l]=l}\" | sort -u" #define get_layouts_local_command(layout) yon_char_unite("xkbcli list --load-exotic | awk -v layout=\"",layout,"\" \"BEGIN {layout_pattern = sprintf(\\\"^ *- *layout: *'%s'\\\",layout);matched=0} matched && /variant:/ {match(\\$0, /: *'([^']+)'/, matches);variant = matches[1]} matched && /description:/ {match(\\$0, /: *(.+)/, matches);description = matches[1]} matched && /^ *-/{matched=0; if (variant) printf \\\"%s|%s\\n\\\",variant,description} \\$0 ~ layout_pattern {matched=1;variant=\\\"\\\";description=\\\"\\\";next}\" | sort -u",NULL) #define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7,253" @@ -71,6 +75,33 @@ NULL #define AUTOINSTALL_DEVICE "AUTOINSTALL[device]" #define AUTOSTART_PARTS "AUTOINSTALL[part]" +#define user_name_parameter "AUTOINSTALL[user_name]" +#define user_name_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_name]" +#define user_gecos_parameter "AUTOINSTALL[user_gecos]" +#define user_gecos_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_gecos]" +#define user_password_parameter "AUTOINSTALL[user_password]" +#define user_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_password]" +#define root_password_parameter "AUTOINSTALL[root_password]" +#define root_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[root_password]" +#define autologin_parameter "AUTOINSTALL[autologin]" +#define autologin_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[autologin]" +#define xkbmodel_parameter "AUTOINSTALL[xkbmodel]" +#define xkbmodel_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbmodel]" +#define xkblayout_parameter "AUTOINSTALL[xkblayout]" +#define xkblayout_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkblayout]" +#define xkbvariant_parameter "AUTOINSTALL[xkbvariant]" +#define xkbvariant_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbvariant]" +#define xkboptions_parameter "AUTOINSTALL[xkboptions]" +#define xkboptions_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkboptions]" +#define hostname_parameter "AUTOINSTALL[hostname]" +#define hostname_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]" +#define zone_parameter "AUTOINSTALL[hostname]" +#define zone_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]" +#define lang_parameter "AUTOINSTALL[hostname]" +#define lang_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]" +#define locale_parameter "AUTOINSTALL[hostname]" +#define locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]" + #define save_config_command(parameters) yon_char_append("pkexec ubconfig set [autoinstall] ",parameters) #define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get autoinstall AUTOINSTALL[type_install]" @@ -81,6 +112,8 @@ NULL #define progress_path "/tmp/ubinstall/ubinstall_progress.log" +#define password_limits_path "/etc/security/pwquiality.conf" + typedef char* string; string version_application; @@ -114,6 +147,8 @@ typedef struct { int lock_load_global; int always_open_documentation; + + int password_min_length; int debug_mode; guint slider_thread; @@ -206,6 +241,7 @@ typedef struct { GtkWidget *AdditionalSoftwareTree; GtkTreeModel *LanguagesFilter; + GtkTreeModel *LayoutsFilter; GdkPixbuf *regions_original; GdkPixbuf *keyboard_original; @@ -231,6 +267,7 @@ typedef struct{ GtkWidget *CancelButton; GtkWidget *SaveButton; GtkWidget *LayoutsTree; + GtkCellRenderer *ActiveToggle; } ubinstall_keyboard_window; typedef struct{ @@ -246,8 +283,24 @@ typedef struct{ GtkCellRenderer *ToggleRenderer; } ubinstall_language_window; +typedef struct{ + GtkWidget *CreateGroupWindow; + GtkWidget *StatusBox; + GtkWidget *UserCancelButton; + GtkWidget *UserOkButton; + GtkWidget *PasswordEntry; + GtkWidget *RepeatPasswordEntry; + GtkWidget *PasswordHashEntry; + GtkWidget *HashBox; + GtkWidget *PasswordBox; + GtkWidget *NoEncriptionCheck; +} password_window; + void config_init(); main_window *yon_main_window_complete(); ubinstall_language_window *yon_ubinstall_language_new(); void NewFunction(ubinstall_language_window *window, GtkBuilder *builder); ubinstall_keyboard_window *yon_ubinstall_keyboard_new(); + +password_window *yon_password_new(); +void on_password_accept(GtkWidget *self, dictionary *dict); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 175a376..0396055 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -74,4 +74,9 @@ #define ZONE_EMPTY_LABEL _("Zone were not fullified") #define LANGUAGES_EMPTY_LABEL _("Languages list is empty") #define LOCALE_EMPTY_LABEL _("System locale hasn't been chosen") -#define LAYOUTS_CHOSEN_BUT_EMPTY_LABEL _("Manual layouts has been chosen but empty") \ No newline at end of file +#define LAYOUTS_CHOSEN_BUT_EMPTY_LABEL _("Manual layouts has been chosen but empty") + +#define PASSWORD_TITLE_LABEL _("Password input") +#define PASSWORD_MISMATCH_LABEL _("Password mismatch") +#define EMPTY_IMPORTANT_LABEL _("Empty important field") +#define PASSWORD_SHORT_LABEL(min_size_char) yon_char_unite(_("Password must be at least")," ", min_size_char," ",_("characters")) \ No newline at end of file diff --git a/ubinstall-gtk-keyboard.glade b/ubinstall-gtk-keyboard.glade index 705e924..7d46458 100644 --- a/ubinstall-gtk-keyboard.glade +++ b/ubinstall-gtk-keyboard.glade @@ -57,7 +57,7 @@ column - + 2 3 diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index 4589922..6feb5ac 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -54,6 +54,9 @@ + + LayoutList + @@ -93,16 +96,6 @@ False gtk-missing-image - - True - False - gtk-missing-image - - - True - False - gtk-missing-image - True False @@ -368,6 +361,7 @@ agreement 5 5 left + False True @@ -1590,13 +1584,6 @@ and help you install UBLinux on your computer 0 Default (Regular 105-key) - Regular 86-key - Regular 101-key - Regular 102-key - Regular 104-key - Regular 104-key (L-shaped Enter) - Regular 105-key - Dell 101 keys @@ -1635,7 +1622,7 @@ and help you install UBLinux on your computer False 0 - Default (L_Alt + L_Shift) + Default (L_Alt + L_Shift) Left Alt Right Alt Caps Lock @@ -1709,6 +1696,7 @@ and help you install UBLinux on your computer True + False False 5 @@ -1720,6 +1708,7 @@ and help you install UBLinux on your computer True True + LayoutsFilter 0 @@ -1978,7 +1967,6 @@ and help you install UBLinux on your computer Default Set a password - Do no set a password @@ -1994,6 +1982,7 @@ and help you install UBLinux on your computer False ****** + password True @@ -2001,19 +1990,6 @@ and help you install UBLinux on your computer 2 - - - True - True - True - image22 - - - False - True - 3 - - False @@ -2073,7 +2049,6 @@ and help you install UBLinux on your computer Default Set a password - Do not set a password @@ -2089,6 +2064,7 @@ and help you install UBLinux on your computer False ****** + password True @@ -2096,19 +2072,6 @@ and help you install UBLinux on your computer 2 - - - True - True - True - image21 - - - False - True - 3 - - False @@ -5431,7 +5394,6 @@ separately into the selected partition. True False - label False @@ -5491,7 +5453,6 @@ separately into the selected partition. True False - label False