Merge pull request 'master' (#91) from YanTheKaller/ubl-settings-services:master into master

Reviewed-on: #91
pull/128/head^2 v2.14
Dmitry Razumov 1 year ago
commit 655f1915b6

@ -166,20 +166,24 @@ void on_activate(GtkTreeView *self, main_window *widgets){
void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){
GtkTreeIter filter_iter;
GtkTreeIter iter;
GtkTreeIter iter,itor;
GtkTreeModel *model;
GtkTreeModel *filter;
GtkTreeModel *sort;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->SystemList);
filter = GTK_TREE_MODEL(widgets->SystemFilter);
sort = GTK_TREE_MODEL(widgets->SystemSort);
} else {
model = GTK_TREE_MODEL(widgets->UserList);
filter = GTK_TREE_MODEL(widgets->UserFilter);
sort = GTK_TREE_MODEL(widgets->UserSort);
}
GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
gtk_tree_model_get_iter(sort,&filter_iter,path_converted);
{
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
char *name;
gtk_tree_model_get(model,&iter,0,&status,5,&name,-1);
@ -224,20 +228,24 @@ void on_config_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid
void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widgets){
GtkTreeIter filter_iter;
GtkTreeIter iter;
GtkTreeIter iter,itor;
GtkTreeModel *model;
GtkTreeModel *filter;
GtkTreeModel *sort;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->SystemList);
filter = GTK_TREE_MODEL(widgets->SystemFilter);
sort = GTK_TREE_MODEL(widgets->SystemSort);
} else {
model = GTK_TREE_MODEL(widgets->UserList);
filter = GTK_TREE_MODEL(widgets->UserFilter);
sort = GTK_TREE_MODEL(widgets->UserSort);
}
GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
gtk_tree_model_get_iter(sort,&filter_iter,path_converted);
{
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
char *name;
gtk_tree_model_get(model,&iter,1,&status,5,&name,-1);
@ -283,20 +291,24 @@ void on_config_autostop_clicked(GtkCellRenderer *, char *path, main_window *widg
void on_config_block_clicked(GtkCellRenderer *, char *path, main_window *widgets){
GtkTreeIter filter_iter;
GtkTreeIter iter;
GtkTreeIter iter,itor;
GtkTreeModel *model;
GtkTreeModel *filter;
GtkTreeModel *sort;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->SystemList);
filter = GTK_TREE_MODEL(widgets->SystemFilter);
sort = GTK_TREE_MODEL(widgets->SystemSort);
} else {
model = GTK_TREE_MODEL(widgets->UserList);
filter = GTK_TREE_MODEL(widgets->UserFilter);
sort = GTK_TREE_MODEL(widgets->UserSort);
}
GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
gtk_tree_model_get_iter(sort,&filter_iter,path_converted);
{
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
char *name;
gtk_tree_model_get(model,&iter,2,&status,5,&name,-1);
@ -346,28 +358,33 @@ void on_system_autostart_confirmed(GtkWidget *,char *service_command){
void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *widgets){
GtkTreeIter filter_iter;
GtkTreeIter iter;
GtkTreeIter iter,itor;
GtkTreeModel *model;
GtkTreeModel *filter;
GtkTreeModel *sort;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->SystemList);
filter = GTK_TREE_MODEL(widgets->SystemFilter);
sort = GTK_TREE_MODEL(widgets->SystemSort);
} else {
model = GTK_TREE_MODEL(widgets->UserList);
filter = GTK_TREE_MODEL(widgets->UserFilter);
sort = GTK_TREE_MODEL(widgets->UserSort);
}
GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
gtk_tree_model_get_iter(sort,&filter_iter,path_converted);
{
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
char *service_name;
gtk_tree_model_get(model,&iter,3,&status,5,&service_name,-1);
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=(!status)==0 ?SERVICE_DISABLE_WARNING_LABEL(service_name):SERVICE_ENABLE_WARNING_LABEL(service_name);
data->data=(!status)==1 ? service_enable_command(service_name) : \
service_disable_command(service_name);
data->function=(void*)(void*)on_system_autostart_confirmed;
data->title = status?SERVICE_AUTOSTOP_TITLE_LABEL:SERVICE_AUTOSTART_TITLE_LABEL;
int responce = yon_confirmation_dialog_call(widgets->Window,data);
if (responce == GTK_RESPONSE_ACCEPT){
gtk_list_store_set(GTK_LIST_STORE(model),&iter,3,!status,-1);
@ -376,10 +393,42 @@ void on_system_autostart_clicked(GtkCellRenderer *, char *path, main_window *wid
}
gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col){
int val_a,val_b;
char *name_a="", *name_b="";
gtk_tree_model_get(model,a,GPOINTER_TO_INT(col),&val_a,6,&name_a,-1);
gtk_tree_model_get(model,b,GPOINTER_TO_INT(col),&val_b,6,&name_b,-1);
if (val_a==val_b){
gchar *key_a = g_utf8_collate_key(name_a, -1);
gchar *key_b = g_utf8_collate_key(name_b, -1);
gint result = strcmp(key_a, key_b);
g_free(key_a);
g_free(key_b);
return result;
}
return val_a ? -1 : 1;
}
gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col){
char *name_a="", *name_b="";
gtk_tree_model_get(model,a,GPOINTER_TO_INT(col),&name_a,-1);
gtk_tree_model_get(model,b,GPOINTER_TO_INT(col),&name_b,-1);
if (!name_a) name_a="";
if (!name_b) name_b="";
gchar *key_a = g_utf8_collate_key(name_a, -1);
gchar *key_b = g_utf8_collate_key(name_b, -1);
gint result = strcmp(key_a, key_b);
g_free(key_a);
g_free(key_b);
return result;
}
gboolean yon_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets){
gboolean autostart,autostop,masked,type,loaded,active;
char *name;
gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&loaded,9,&active,-1);
gtk_tree_model_get(model,iter,0,&autostart,1,&autostop,2,&masked,5,&name,7,&type,8,&active,9,&loaded,-1);
GtkWidget *combo=NULL;
GtkWidget *loaded_check=NULL;
GtkWidget *active_check=NULL;
@ -439,11 +488,11 @@ void on_filter_changed(GtkWidget *, main_window *widgets){
if (page == 0){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),NULL);
gtk_tree_model_filter_refilter(widgets->SystemFilter);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemSort));
} else if (page == 1){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),NULL);
gtk_tree_model_filter_refilter(widgets->UserFilter);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort));
}
}
@ -452,28 +501,32 @@ void on_system_kill_confirmed(GtkWidget *,char *service_name){
}
void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){
GtkTreeIter iter, filter_iter;
GtkTreeIter iter, itor, filter_iter;
GtkTreeModel *model;
GtkTreeModel *filter;
GtkTreeModel *sort;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->SystemList);
filter = GTK_TREE_MODEL(widgets->SystemFilter);
sort = GTK_TREE_MODEL(widgets->SystemSort);
} else {
model = GTK_TREE_MODEL(widgets->UserList);
filter = GTK_TREE_MODEL(widgets->UserFilter);
sort = GTK_TREE_MODEL(widgets->UserSort);
}
GtkTreePath *path_converted = gtk_tree_path_new_from_string(path);
gtk_tree_model_get_iter(filter,&filter_iter,path_converted);
gtk_tree_model_get_iter(sort,&filter_iter,path_converted);
{
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&filter_iter);
gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(sort),&itor,&filter_iter);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(filter),&iter,&itor);
gboolean status = 0;
char *service_name;
gtk_tree_model_get(model,&iter,4,&status,5,&service_name,-1);
if (status){
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=SERVICE_STOP_WARNING_LABEL(service_name);
data->data=service_stop_command(service_name);
data->function=NULL;
data->title = SERVICE_STOP_TITLE_LABEL;
int size;
config_str result = yon_config_load(service_check_active_command(service_name),&size);
yon_char_remove_last_symbol(result[0],'\n');
@ -496,10 +549,11 @@ void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){
}
yon_char_parsed_free(result,size);
} else {
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=SERVICE_START_WARNING_LABEL(service_name);
data->data=service_start_command(service_name);
data->function=(void*)(void*)on_system_kill_confirmed;
data->title = SERVICE_START_TITLE_LABEL;
int size;
config_str result = yon_config_load(service_check_active_command(service_name),&size);
yon_char_remove_last_symbol(result[0],'\n');
@ -507,7 +561,7 @@ void on_system_launch_clicked(GtkWidget *, char *path, main_window *widgets){
int responce = yon_confirmation_dialog_call(widgets->Window,data);
if (responce == GTK_RESPONSE_ACCEPT){
gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,1,-1);
yon_ubl_status_box_render(SERVICE_RELOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
yon_ubl_status_box_render(SERVICE_START_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
}
}
@ -535,10 +589,11 @@ void on_system_restart_clicked(GtkWidget *, main_window *widgets){
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(target_tree)),&model,&iter)){
char *target;
gtk_tree_model_get(model,&iter,5,&target,-1);
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=REEXEC_SERVICE_WARMING_LABEL(target);
data->data=target;
data->function=(void*)(void*)on_service_restart_confirmed;
data->title = RELAUNCH_SERVICE_LABEL;
int responce = yon_confirmation_dialog_call(widgets->Window,data);
if (responce == GTK_RESPONSE_ACCEPT){
yon_ubl_status_box_render(SERVICE_RELOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
@ -553,14 +608,16 @@ void on_sessions_selection_changed(GtkWidget *, main_window *widgets){
gtk_widget_set_sensitive(widgets->SessionStopButton,1);
gtk_widget_set_sensitive(widgets->SessionBlockButton,1);
gtk_widget_set_sensitive(widgets->SessionStartButton,1);
gtk_widget_set_sensitive(widgets->SessionSwitchButton,1);
} else {
gtk_widget_set_sensitive(widgets->SessionStopButton,0);
gtk_widget_set_sensitive(widgets->SessionBlockButton,0);
gtk_widget_set_sensitive(widgets->SessionStartButton,0);
gtk_widget_set_sensitive(widgets->SessionSwitchButton,0);
}
}
void yon_sessions_update(main_window *widgets){
gboolean yon_sessions_update(main_window *widgets){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),NULL);
gtk_list_store_clear(widgets->SessionsList);
int sessions_size;
@ -574,48 +631,93 @@ void yon_sessions_update(main_window *widgets){
else parsed[1]=INACTIVE_LABEL;
if (parsed&&size>4){
gtk_list_store_append(widgets->SessionsList,&iter);
gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,parsed[1],2,atoi(parsed[2]),3,parsed[3],4,parsed[4],-1);
gtk_list_store_set(widgets->SessionsList,&iter,0,atoi(parsed[0]),1,parsed[1],2,atoi(parsed[2]),3,parsed[3],4,parsed[4],5,parsed[4],6,parsed[5],-1);
}
}
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SessionMainTree),GTK_TREE_MODEL(widgets->SessionsList));
return G_SOURCE_REMOVE;
}
void on_session_activate(GtkWidget *, main_window *widgets){
void on_session_activate(GtkWidget *self, main_window *widgets){
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
int id;
gtk_tree_model_get(model,&iter,0,&id,-1);
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
char *convert = yon_char_from_int(id);
yon_launch(session_activate_session(convert));
free(convert);
yon_sessions_update(widgets);
data->action_text = SESSION_ACTIVATE_TOOLTIP_LABEL(convert);
data->title = SESSION_SWITCH_TITLE_LABEL(convert);
if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){
yon_launch(session_activate_session(convert));
free(convert);
yon_sessions_update(widgets);
}
}
}
void on_session_end(GtkWidget *, main_window *widgets){
void on_session_end(GtkWidget *self, main_window *widgets){
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
int id;
gtk_tree_model_get(model,&iter,0,&id,-1);
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
char *convert = yon_char_from_int(id);
yon_launch(session_terminate_session(convert));
free(convert);
yon_sessions_update(widgets);
data->action_text = SESSION_END_TOOLTIP_LABEL(convert);
data->title = SESSION_TERMINATE_TITLE_LABEL(convert);
if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){
if (!system(session_terminate_session(convert))){
GtkTreeModel *model;
GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model, &iter)){
gtk_list_store_remove(widgets->SessionsList,&iter);
}
}
free(convert);
}
}
}
void on_session_unlock(GtkWidget *self, main_window *widgets){
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
int id;
gtk_tree_model_get(model,&iter,0,&id,-1);
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
char *convert = yon_char_from_int(id);
data->action_text = SESSION_UNLOCK_TOOLTIP_LABEL(convert);
data->data = NULL;
data->function = NULL;
data->title = SESSION_UNLOCK_TITLE_LABEL(convert);
if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){
yon_launch(session_unlock_session(convert));
free(convert);
yon_sessions_update(widgets);
}
}
}
void on_session_block(GtkWidget *, main_window *widgets){
void on_session_block(GtkWidget *self, main_window *widgets){
GtkTreeModel *model = GTK_TREE_MODEL(widgets->SessionsList);
GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SessionMainTree)),&model,&iter)){
int id;
gtk_tree_model_get(model,&iter,0,&id,-1);
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
char *convert = yon_char_from_int(id);
yon_launch(session_lock_session(convert));
free(convert);
yon_sessions_update(widgets);
data->action_text = SESSION_BLOCK_TOOLTIP_LABEL(convert);
data->data = NULL;
data->function = NULL;
data->title = SESSION_LOCK_TITLE_LABEL(convert);
if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){
yon_launch(session_lock_session(convert));
free(convert);
yon_sessions_update(widgets);
}
}
}
@ -686,10 +788,15 @@ typedef void (*data_function)(void*,void*);
void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
if (widgets){
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd");
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
data->action_text = RELOAD_SYSTEM_SETTINGS_WARNING_LABEL;
}else if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==1){
data->action_text = RELOAD_USER_SETTINGS_WARNING_LABEL;
}
data->data = widgets;
data->function = (data_function)yon_system_systemd_restart;
data->title = RELAUNCH_SYSTEMCTL_LABEL;
yon_confirmation_dialog_call(self,data);
}
@ -697,7 +804,7 @@ void on_system_update_hz_clicked(GtkWidget *self, main_window *widgets){
void on_system_update_clicked(GtkWidget *self, main_window *widgets){
if (widgets){
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd");
data->data = widgets;
data->function = (data_function)yon_system_systemd_reexec;
@ -808,10 +915,11 @@ void on_system_status_clicked(GtkWidget *, main_window *widgets){
void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){
if (widgets){
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text = REEXEC_SERVICE_WARMING_LABEL("systemd");
data->data = widgets;
data->function = (data_function)yon_system_systemd_restart;
data->title = REEXEC_SYSTEMCTL_LABEL;
yon_confirmation_dialog_call(self,data);
}
@ -820,7 +928,7 @@ void on_user_update_hz_clicked(GtkWidget *self, main_window *widgets){
void on_user_update_clicked(GtkWidget *self, main_window *widgets){
if (widgets){
dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data));
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text = RELOAD_SERVICE_WARMING_LABEL("systemd");
data->data = widgets;
data->function = (data_function)yon_system_systemd_reexec;
@ -1049,9 +1157,17 @@ gboolean yon_interface_list_models_disconnect(main_window *widgets){
return G_SOURCE_REMOVE;
}
void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets){
if (self == gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),2)){
gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUnitsTree),6));
} else {
gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UserUnitsTree),6));
}
}
gboolean yon_interface_list_models_connect(main_window *widgets){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemFilter));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserFilter));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->SystemUnitsTree),GTK_TREE_MODEL(widgets->SystemSort));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->UserUnitsTree),GTK_TREE_MODEL(widgets->UserSort));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->ConfigMainTree),GTK_TREE_MODEL(widgets->ConfigList));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->TimersMainTree),GTK_TREE_MODEL(widgets->TimersList));
@ -1065,21 +1181,21 @@ gboolean yon_interface_list_models_connect(main_window *widgets){
gboolean yon_system_set(struct system_services_data *data){
GtkTreeIter iter;
gtk_list_store_append(data->widgets->SystemList,&iter);
gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1);
gtk_list_store_set(data->widgets->SystemList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,_(data->State),13,data->State,-1);
return G_SOURCE_REMOVE;
}
gboolean yon_user_set(struct system_user_data *data){
GtkTreeIter iter;
gtk_list_store_append(data->widgets->UserList,&iter);
gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,data->State,-1);
gtk_list_store_set(data->widgets->UserList,&iter,3,data->SystemAutostart,4,data->SystemLaunched,5,data->Name,6,data->Descr,5,data->Name,6,data->Descr,7,data->Type,8,data->Loaded,9,data->Active,11,_(data->State),13,data->State,-1);
return G_SOURCE_REMOVE;
}
gboolean yon_system_config_set(struct system_config_data *data){
GtkTreeIter iter;
gtk_list_store_append(data->widgets->ConfigList,&iter);
gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Date,2,data->Descr,-1);
gtk_list_store_set(data->widgets->ConfigList,&iter,0,data->Name,1,data->Descr,2,data->Date,-1);
return G_SOURCE_REMOVE;
}
@ -1220,22 +1336,29 @@ gboolean yon_interface_update_finish(main_window *widgets){
}
}
main_config.update_thread_active=0;
char *final = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",main_config.load_mode==0?yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),NULL);
yon_ubl_status_box_render(final,BACKGROUND_IMAGE_SUCCESS_TYPE);
free(final);
return G_SOURCE_REMOVE;
}
void* yon_interface_update(main_window *widgets){
dictionary *dict = yon_systemd_get_list();
if (dict){}
// dictionary *dict = yon_systemd_get_list();
// if (dict){}
if (widgets){
g_idle_add((GSourceFunc)yon_interface_list_models_disconnect,widgets);
// int system_size;
// config_str system_services = yon_config_load(load_services_command,&system_size);
int system_size;
config_str system_services = yon_config_load(load_services_command,&system_size);
int system_units_size;
config_str system_units = yon_config_load(load_system_units_command,&system_units_size);
int user_size;
config_str user_services = yon_config_load(load_user_services_command,&user_size);
int user_units_size;
config_str user_units = yon_config_load(load_user_units_command,&user_units_size);
int config_size;
config_str config_files = yon_config_load(get_config_files_command,&config_size);
int timers_size;
config_str timers = yon_config_load(get_timers_command,&timers_size);
config_str timers = yon_config_load(get_timers_command,&timers_size);
struct json_object *jsobject = json_tokener_parse(timers[0]);
int launched_size;
config_str launched = yon_config_load(load_launched_command,&launched_size);
@ -1243,47 +1366,101 @@ void* yon_interface_update(main_window *widgets){
yon_char_remove_last_symbol(launched[i],'\n');
}
dictionary *dact = NULL;
for_dictionaries(dact,dict){
enum YON_UNIT_TYPE type = yon_get_unit_type(((systemd_struct*)dact->data)->name);
struct system_services_data *data = malloc(sizeof(struct system_services_data));
{
data->widgets=widgets;
data->SystemAutostart=((systemd_struct*)dact->data)->enable;
data->SystemLaunched=((systemd_struct*)dact->data)->active;
data->Name=((systemd_struct*)dact->data)->name;
data->Descr=((systemd_struct*)dact->data)->description;
data->Type = type;
data->Loaded=((systemd_struct*)dact->data)->load;
data->Active=((systemd_struct*)dact->data)->active;
data->State=((systemd_struct*)dact->data)->state;
}
g_idle_add((GSourceFunc)yon_system_set,data);
// dictionary *dact = NULL;
// for_dictionaries(dact,dict){
// enum YON_UNIT_TYPE type = yon_get_unit_type(((systemd_struct*)dact->data)->name);
// struct system_services_data *data = malloc(sizeof(struct system_services_data));
// {
// data->widgets=widgets;
// data->SystemAutostart=((systemd_struct*)dact->data)->enable;
// data->SystemLaunched=((systemd_struct*)dact->data)->active;
// data->Name=((systemd_struct*)dact->data)->name;
// data->Descr=((systemd_struct*)dact->data)->description;
// data->Type = type;
// data->Loaded=((systemd_struct*)dact->data)->load;
// data->Active=((systemd_struct*)dact->data)->active;
// data->State=((systemd_struct*)dact->data)->state;
// }
// g_idle_add((GSourceFunc)yon_system_set,data);
// }
for (int i=0; i<system_size;i++){
GtkTreeIter iter;
if (system_services[i][strlen(system_services[i])-1]=='\n') system_services[i][strlen(system_services[i])-1] = '\0';
int size;
config_str parsed = yon_char_parse(system_services[i],&size,";");
char *name_temp = yon_char_replace(parsed[0],"\\","\18");
if (name_temp!=parsed[0]) free(parsed[0]);
parsed[0]=yon_char_replace(name_temp,"\18","\\\\");
if (name_temp!=parsed[0]) free(name_temp);
if (parsed){
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->SystemList,&iter);
gtk_list_store_set(widgets->SystemList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1);
}
}
for (int i=0;i<system_units_size;i++){
yon_char_remove_last_symbol(system_units[i],'\n');
if (!yon_char_parsed_check_exist_begins_with(system_services,system_size,system_units[i])){
GtkTreeIter iter;
gtk_list_store_append(widgets->SystemList,&iter);
enum YON_UNIT_TYPE type = yon_get_unit_type(system_units[i]);
gtk_list_store_set(widgets->SystemList,&iter,0,0,1,0,2,0,3,0,4,0,5,system_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
}
}
// for (int i=0; i<user_size;i++){
// if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0';
// int size;
// config_str parsed = yon_char_parse(user_services[i],&size,";");
// if (parsed){
// // int loaded = !system(user_check_enabled_command(parsed[0]));
// // int active = !system(user_check_active_command(parsed[0]));
// enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
// struct system_user_data *data = malloc(sizeof(struct system_user_data));
// {
// data->widgets=widgets;
// data->SystemAutostart=0;//loaded;
// data->SystemLaunched=0;//active;
// data->Name=yon_char_new(parsed[0]);
// data->Descr=yon_char_new(parsed[4]);
// data->Type = type;
// data->Loaded=strcmp(parsed[1],"loaded")?0:1;
// data->Active=strcmp(parsed[2],"active")?0:1;
// data->State=yon_char_new(_(parsed[3]));
// }
// g_idle_add((GSourceFunc)yon_user_set,data);
// }
// yon_char_parsed_free(parsed,size);
// }
for (int i=0; i<user_size;i++){
GtkTreeIter iter;
if (user_services[i][strlen(user_services[i])-1]=='\n') user_services[i][strlen(user_services[i])-1] = '\0';
int size;
config_str parsed = yon_char_parse(user_services[i],&size,";");
if (parsed){
// int loaded = !system(user_check_enabled_command(parsed[0]));
// int active = !system(user_check_active_command(parsed[0]));
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
struct system_user_data *data = malloc(sizeof(struct system_user_data));
{
data->widgets=widgets;
data->SystemAutostart=0;//loaded;
data->SystemLaunched=0;//active;
data->Name=yon_char_new(parsed[0]);
data->Descr=yon_char_new(parsed[4]);
data->Type = type;
data->Loaded=strcmp(parsed[1],"loaded")?0:1;
data->Active=strcmp(parsed[2],"active")?0:1;
data->State=yon_char_new(_(parsed[3]));
}
g_idle_add((GSourceFunc)yon_user_set,data);
int loaded = !strcmp(parsed[1],"loaded");
int active = !strcmp(parsed[2],"active");
enum YON_UNIT_TYPE type = yon_get_unit_type(parsed[0]);
gtk_list_store_append(widgets->UserList,&iter);
gtk_list_store_set(widgets->UserList,&iter,3,loaded,4,active,5,parsed[0],6,parsed[4],7,type,8,active,9,1,11,_(parsed[3]),13,parsed[3],-1);
}
}
for (int i=0;i<user_units_size;i++){
yon_char_remove_last_symbol(user_units[i],'\n');
if (!yon_char_parsed_check_exist_begins_with(user_services,user_size,user_units[i])){
GtkTreeIter iter;
gtk_list_store_append(widgets->UserList,&iter);
enum YON_UNIT_TYPE type = yon_get_unit_type(user_units[i]);
gtk_list_store_set(widgets->UserList,&iter,0,0,1,0,2,0,3,0,4,0,5,user_units[i],6,"",7,type,8,0,9,0,10,0,11,_("disabled"),13,"disabled",-1);
}
yon_char_parsed_free(parsed,size);
}
int descr_size;
@ -1326,7 +1503,7 @@ void* yon_interface_update(main_window *widgets){
g_idle_add((GSourceFunc)yon_system_config_set,data);
}
}
yon_sessions_update(widgets);
g_idle_add((GSourceFunc)yon_sessions_update,widgets);
for (size_t i=0;i<json_object_array_length(jsobject);i++){
struct json_object *item_obj = json_object_array_get_idx(jsobject, i);
@ -1556,7 +1733,7 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt
if (name[0]=='-'){
name_target = yon_char_append("-- ",name_target);
}
config_str target = yon_config_load(get_activate_deactivate_times(name_target), &size);
config_str target = yon_config_load(yon_debug_output("%s\n",get_activate_deactivate_times(name_target)), &size);
free(name_target);
if (target){
free(yon_char_divide_search(target[0], "=", -1));
@ -1578,7 +1755,7 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt
if (target){
gchar *formatted_activa = g_strdup(NULL_LABEL);//!yon_char_is_empty(target[1])&&strcmp(target[1],"0")?target[1]:g_strdup(NULL_LABEL);
gchar *formatted_deactiva = g_strdup(NULL_LABEL);//!yon_char_is_empty(target[2])&&strcmp(target[2],"0")?target[2]:g_strdup(NULL_LABEL);
if (strcmp(target[1],"0")){
if (!yon_char_is_empty(target[1])&&strcmp(target[1],"0")){
int activated_size;
config_str activated_parsed = yon_char_parse(target[1],&activated_size," ");
int date_size;
@ -1587,16 +1764,16 @@ gboolean on_tooltip_show(GtkWidget*, gint x, gint y, gboolean, GtkTooltip* toolt
char *temp = date_parsed[0];
date_parsed[0]=date_parsed[2];
date_parsed[2]=temp;
formatted_deactiva = yon_char_unite(date_parsed?yon_char_parsed_to_string(date_parsed,date_size,"."):""," ",activated_parsed[2],NULL);
formatted_activa = yon_char_unite(date_parsed?yon_char_parsed_to_string(date_parsed,date_size,"."):""," ",activated_parsed[2],NULL);
if (date_size) yon_char_parsed_free(date_parsed,date_size);
}
if (activated_size) yon_char_parsed_free(activated_parsed,activated_size);
}
if (strcmp(target[2],"0")){
if (!yon_char_is_empty(target[2])&&strcmp(target[2],"0")){
int deactivated_size;
config_str deactivated_parsed = yon_char_parse(target[2],&deactivated_size," ");
int date_size;
config_str date_parsed = yon_char_parse(deactivated_parsed[0],&date_size,"-");
config_str date_parsed = yon_char_parse(deactivated_parsed[1],&date_size,"-");
if (date_size>=2){
char *temp = date_parsed[0];
date_parsed[0]=date_parsed[2];
@ -1680,7 +1857,9 @@ void yon_main_window_complete(main_window *widgets){
widgets->SystemEditButton=yon_gtk_builder_get_widget(builder,"SystemEditButton");
widgets->SystemPropertiesButton=yon_gtk_builder_get_widget(builder,"SystemPropertiesButton");
widgets->SystemFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"SystemFilter"));
widgets->SystemSort = GTK_TREE_MODEL_SORT(gtk_builder_get_object(builder,"SystemSort"));
widgets->UserFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"UserFilter"));
widgets->UserSort = GTK_TREE_MODEL_SORT(gtk_builder_get_object(builder,"UserSort"));
widgets->SystemStatusButton=yon_gtk_builder_get_widget(builder,"SystemStatusButton");
widgets->ConfigAutostartCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostartCell"));
widgets->ConfigAutostopCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ConfigAutostopCell"));
@ -1727,19 +1906,24 @@ void yon_main_window_complete(main_window *widgets){
PROPERTIES_LABEL,properties_icon_path,on_user_status_clicked,widgets,
NULL);
widgets->ConfigUpdateButton=yon_gtk_builder_get_widget(builder,"ConfigUpdateButton");
widgets->ConfigEditButton=yon_gtk_builder_get_widget(builder,"ConfigEditButton");
widgets->ConfigMainTree=yon_gtk_builder_get_widget(builder,"ConfigMainTree");
widgets->SessionRestartButton=yon_gtk_builder_get_widget(builder,"SessionRestartButton");
widgets->SessionMainTree=yon_gtk_builder_get_widget(builder,"SessionMainTree");
widgets->SessionSwitchButton=yon_gtk_builder_get_widget(builder,"SessionSwitchButton");
widgets->SessionStartButton=yon_gtk_builder_get_widget(builder,"SessionStartButton");
widgets->SessionStopButton=yon_gtk_builder_get_widget(builder,"SessionStopButton");
widgets->SessionBlockButton=yon_gtk_builder_get_widget(builder,"SessionBlockButton");
widgets->SessionMenu = yon_rmb_menu_setup(widgets->SessionMainTree,NULL,NULL,
ACTIVATE_SESSION_LABEL,play_icon_path,G_CALLBACK(on_session_activate),widgets,
END_SESSION_LABEL,stop_icon_path,G_CALLBACK(on_session_end),widgets,
UPDATE_LABEL,update_icon_path,G_CALLBACK(on_interface_update),widgets,
ACTIVATE_SESSION_LABEL,switch_icon_path,G_CALLBACK(on_session_activate),widgets,
BLOCK_SESSION_LABEL,block_icon_path,G_CALLBACK(on_session_block),widgets,
UNLOCK_SESSION_LABEL,unlock_icon_path,G_CALLBACK(on_session_unlock),widgets,
END_SESSION_LABEL,end_icon_path,G_CALLBACK(on_session_end),widgets,
NULL);
gtk_style_context_add_class(gtk_widget_get_style_context(((GtkWidget*)widgets->SessionMenu->buttons->first->data)),"separatorBottom");
{
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->SystemMenu->menu));
gtk_style_context_add_class(gtk_widget_get_style_context(g_list_nth_data(list,1)),"separatorTop");
@ -1756,6 +1940,7 @@ void yon_main_window_complete(main_window *widgets){
widgets->SystemDescriptionLabel=yon_gtk_builder_get_widget(builder,"SystemDescriptionLabel");
}
widgets->TimersMainTree=yon_gtk_builder_get_widget(builder,"TimersMainTree");
widgets->TimersUpdateButton=yon_gtk_builder_get_widget(builder,"TimersUpdateButton");
GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemUnitsTree));
yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree));
@ -1789,9 +1974,11 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->UserUnloadedShowCheck),"toggled",G_CALLBACK(on_filter_changed),widgets);
g_signal_connect(G_OBJECT(widgets->ConfigEditButton),"clicked",G_CALLBACK(on_config_edit_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->ConfigUpdateButton),"clicked",G_CALLBACK(on_interface_update),widgets);
g_signal_connect(G_OBJECT(widgets->SessionRestartButton),"clicked",G_CALLBACK(on_interface_update),widgets);
g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_activate),widgets);
g_signal_connect(G_OBJECT(widgets->SessionSwitchButton),"clicked",G_CALLBACK(on_session_activate),widgets);
g_signal_connect(G_OBJECT(widgets->SessionStartButton),"clicked",G_CALLBACK(on_session_unlock),widgets);
g_signal_connect(G_OBJECT(widgets->SessionStopButton),"clicked",G_CALLBACK(on_session_end),widgets);
g_signal_connect(G_OBJECT(widgets->SessionBlockButton),"clicked",G_CALLBACK(on_session_block),widgets);
g_signal_connect(G_OBJECT(widgets->SessionMainTree),"cursor-changed",G_CALLBACK(on_sessions_selection_changed),widgets);
@ -1815,7 +2002,12 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->UserConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->UserConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->UserConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->TimersUpdateButton),"clicked",G_CALLBACK(on_interface_update),widgets);
g_signal_connect(G_OBJECT(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemUpperTree),2)),"clicked",G_CALLBACK(on_sort_activate),widgets);
g_signal_connect(G_OBJECT(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersUpperTree),2)),"clicked",G_CALLBACK(on_sort_activate),widgets);
if (getuid()==0){
gtk_widget_set_sensitive(widgets->UserServiceUpdateButton,0);
gtk_widget_set_sensitive(widgets->UserPrevButton,0);
@ -1883,6 +2075,11 @@ void yon_main_window_complete(main_window *widgets){
yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size);
gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL);
gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL);
for (int i=0;i<5;i++){
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),i,(GtkTreeIterCompareFunc)sort_bool,GINT_TO_POINTER(i),NULL);
}
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),5,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(13),NULL);
gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(widgets->SystemSort),6,(GtkTreeIterCompareFunc)sort_string,GINT_TO_POINTER(6),NULL);
gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->UserUnitsTree),5);
yon_load_proceed(YON_CONFIG_LOCAL);
yon_ubl_status_box_render(LIST_LOAD_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);

@ -39,6 +39,8 @@
#define systemd_config_path "resource:///com/ublinux/csv/systemd_conf.csv"
#define load_services_command "systemctl list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'"
#define load_system_units_command "systemctl list-unit-files --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)(.*)/\\1/'"
#define load_user_units_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-unit-files --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)(.*)/\\1;\\2;\\3;/'",NULL)
#define load_user_services_command yon_char_unite("systemctl --user --machine=",yon_ubl_root_user_get(),"@ list-units --no-pager --all --plain --no-legend |sed -E 's/(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)/\\1;\\2;\\3;\\4;\\5/'",NULL)
#define load_system_services_command "systemctl --system list-units --no-pager --all |grep -E \"^ \" |grep -v \"UNIT\" |sed -e 's/ */;/g' -e 's/^;//g' |cut -f1 -d';'"
#define load_enabled_command "systemctl list-unit-files --no-pager --state=enabled --all |sed -e 's/ */:/g' -e 's/ *: */:/g'|cut -f1 -d:"
@ -83,7 +85,7 @@
#define list_of_sockets_command "systemctl list-sockets --all --no-pager| sed -e 's/ */;/g'"
#define list_of_timers_command "systemctl list-timers --all --no-pager| sed -e 's/ */;/g'"
#define list_of_session_command "while IFS=\" \" read -r GET_SESSION GET_UID GET_USER GET_SEAT GET_TTY; do echo -e \"${GET_SESSION} $(loginctl session-status ${GET_SESSION} --no-page | sed -Enr \"s/^\\s*State: (.*)$/\1/p\") ${GET_UID} ${GET_USER} ${GET_SEAT} ${GET_TTY}\"; done < <(loginctl list-sessions --no-legend)"
#define get_activate_deactivate_times(target) yon_char_append("systemctl show --timestamp=utc -p Names -p ActiveEnterTimestamp -p InactiveEnterTimestampMonotonic ",target)
#define get_activate_deactivate_times(target) yon_char_append("systemctl show --timestamp=utc -p Names -p ActiveEnterTimestamp -p InactiveEnterTimestamp ",target)
#define config_get_command(target) yon_char_append("cat ",target)
@ -102,7 +104,10 @@
#define play_icon_path "com.ublinux.ubl-settings-services.play-symbolic"
#define stop_icon_path "com.ublinux.ubl-settings-services.stop-symbolic"
#define block_icon_path "com.ublinux.ubl-settings-services.cancel-symbolic"
#define block_icon_path "com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic"
#define unlock_icon_path "com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic"
#define end_icon_path "com.ublinux.libublsettingsui-gtk3.move-away-symbolic"
#define switch_icon_path "com.ublinux.libublsettingsui-gtk3.move-in-symbolic"
#define start_icon_path "com.ublinux.ubl-settings-services.launch-symbolic"
#define update_icon_path "com.ublinux.ubl-settings-services.sync-symbolic"
#define launch_icon_path "com.ublinux.ubl-settings-services.check-symbolic"
@ -222,16 +227,19 @@ typedef struct {
GtkWidget *UserDescriptionLabel;
GtkWidget *ConfigEditButton;
GtkWidget *ConfigUpdateButton;
GtkWidget *ConfigMainTree;
GtkWidget *SessionRestartButton;
GtkWidget *SessionMainTree;
GtkWidget *SessionSwitchButton;
GtkWidget *SessionStartButton;
GtkWidget *SessionStopButton;
GtkWidget *SessionBlockButton;
rmb_menu_window *SessionMenu;
GtkWidget *TimersMainTree;
GtkWidget *TimersUpdateButton;
GtkWidget *MainNotebook;
GtkWidget *SystemServicesStatusMenuItem;
@ -255,7 +263,9 @@ typedef struct {
GtkWidget *DeactivateLabel;
GtkTreeModelFilter *SystemFilter;
GtkTreeModelSort *SystemSort;
GtkTreeModelFilter *UserFilter;
GtkTreeModelSort *UserSort;
GtkCellRenderer *ConfigAutostartCell;
GtkCellRenderer *ConfigAutostopCell;
@ -386,7 +396,9 @@ void on_service_restart_confirmed(GtkWidget *self,char *service_name);
void on_system_system_restart_clicked(GtkWidget *self, main_window *widgets);
void yon_sessions_update(main_window *widgets);
gboolean yon_sessions_update(main_window *widgets);
void on_session_unlock(GtkWidget *self, main_window *widgets);
void on_session_activate();
@ -531,4 +543,7 @@ gboolean yon_user_set(struct system_user_data *data);
gboolean yon_system_set(struct system_services_data *data);
gboolean yon_interface_list_models_connect(main_window *widgets);
gboolean yon_interface_list_models_disconnect(main_window *widgets);
void on_sort_activate(GtkTreeViewColumn *self, main_window *widgets);
gboolean sort_bool(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col);
gboolean sort_string(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b,gpointer col);
#endif

@ -50,9 +50,10 @@
#define SHOW_LOG_LABEL _("Show log")
#define SHOW_SOURCE_LABEL _("Show source")
#define PROPERTIES_LABEL _("Properties")
#define ACTIVATE_SESSION_LABEL _("Activate session")
#define ACTIVATE_SESSION_LABEL _("Switch to session")
#define END_SESSION_LABEL _("Terminate session")
#define BLOCK_SESSION_LABEL _("Block session")
#define BLOCK_SESSION_LABEL _("Lock session")
#define UNLOCK_SESSION_LABEL _("Unlock session")
#define SOURCE_UNFOUND_LABEL _("Service source were not loaded")
#define SERVICE_START_FAILED_LABEL _("Failed to launch service")
@ -69,6 +70,23 @@
#define RELOAD_SERVICE_WARMING_LABEL(target) yon_char_unite(_("Are you sure want to reload "),target,"?\n",_("The system may become unstable."),NULL)
#define SERVICE_ENABLE_WARNING_LABEL(target) yon_char_unite(_("Are you sure want to enable "),target,"?\n",_("The system may become unstable."),NULL)
#define SERVICE_DISABLE_WARNING_LABEL(target) yon_char_unite(_("Are you sure want to disable "),target,"?\n",_("The system may become unstable."),NULL)
#define RELOAD_SYSTEM_SETTINGS_WARNING_LABEL yon_char_unite(_("Are you sure want to reload system units settings?"),"\n",_("The system may become unstable."),NULL)
#define RELOAD_USER_SETTINGS_WARNING_LABEL yon_char_unite(_("Are you sure want to reload user units settings?"),"\n",_("The system may become unstable."),NULL)
#define SESSION_ACTIVATE_TOOLTIP_LABEL(target) yon_char_unite(_("Are you sure you want to switch on session")," <b>ID-",target,"</b>?",NULL)
#define SESSION_END_TOOLTIP_LABEL(target) yon_char_unite("<b>",_("Attention!"),"</b> ",_("You are about to")," <b>",_("end your session")," ID-",target,"</b>. ",_("If this is your active session, you will be taken to the login screen. Make sure to save all files before performing this operation."),NULL)
#define SESSION_BLOCK_TOOLTIP_LABEL(target) yon_char_unite(_("Are you sure you want to block session")," <b>ID-",target,"</b>?",NULL)
#define SESSION_UNLOCK_TOOLTIP_LABEL(target) yon_char_unite(_("Are you sure you want to unlock session")," <b>ID-",target,"</b>?",NULL)
#define SERVICE_START_TITLE_LABEL _("Service start")
#define SERVICE_STOP_TITLE_LABEL _("Service stop")
#define SERVICE_AUTOSTART_TITLE_LABEL _("Service enabling")
#define SERVICE_AUTOSTOP_TITLE_LABEL _("Service disabling")
#define SESSION_SWITCH_TITLE_LABEL(target) yon_char_unite(_("Switching to session")," ID-",target,NULL)
#define SESSION_LOCK_TITLE_LABEL(target) yon_char_unite(_("Lock session")," ID-",target,NULL)
#define SESSION_UNLOCK_TITLE_LABEL(target) yon_char_unite(_("Unlock session")," ID-",target,NULL)
#define SESSION_TERMINATE_TITLE_LABEL(target) yon_char_unite(_("Terminate session")," ID-",target,NULL)
#define DAYS_LABEL _("Days")
#define HOURS_LABEL _("Hours")
#define MINUTES_LABEL _("Minutes")
@ -94,12 +112,12 @@
#define RELAUNCH_SYSTEMCTL_LABEL _("Reload settings")
#define REEXEC_SYSTEMCTL_LABEL _("Reexec systemd")
#define SHOW_SERVICE_INFO_LABEL _("Show service information")
#define SHOW_SERVICE_INFO_LABEL _("Service information")
#define RELAUNCH_SERVICE_LABEL _("Relaunch with new configuration")
#define SHOW_SERVICE_LOG_LABEL _("Show service log")
#define SHOW_SERVICE_SOURCE_LABEL _("Show service source file")
#define SHOW_SERVICE_PROPERTIES_LABEL _("Show service properties")
#define SHOW_LABEL _("Show...")
#define SHOW_SERVICE_LOG_LABEL _("Service log")
#define SHOW_SERVICE_SOURCE_LABEL _("Service source file")
#define SHOW_SERVICE_PROPERTIES_LABEL _("Service properties")
#define SHOW_LABEL _("Additional information")
#define EDIT_CONFIG_LABEL _("Edit configuration file")
@ -127,6 +145,7 @@
#define PASSED_LABEL _("Passed")
#define ACTIVATES_LABEL _("Activates")
#define STATE_DISABLED_LABEL _("disabled")
#define STATE_ACTIVE_LABEL _("active")
#define STATE_DEAD_LABEL _("dead")
#define STATE_WAITING_LABEL _("waiting")
@ -148,6 +167,7 @@
#define SYSTEMD_RELAUNCH_SUCCESS_LABEL _("Systemd has been relaunched")
#define SERVICE_RELOAD_SUCCESS_LABEL _("Service has been successfully restarted")
#define SERVICE_START_SUCCESS_LABEL _("Service has been successfully launched")
#define SAVE_LABEL _("Save")
#define NULL_LABEL _("Null")

@ -19,7 +19,7 @@
<column type="gint"/>
<!-- column-name Status -->
<column type="gchararray"/>
<!-- column-name User Id -->
<!-- column-name User -->
<column type="gint"/>
<!-- column-name Username -->
<column type="gchararray"/>
@ -59,11 +59,16 @@
<column type="gchararray"/>
<!-- column-name Tooltip -->
<column type="gchararray"/>
<!-- column-name UnitStateUnlocalised -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="SystemFilter">
<property name="child-model">SystemList</property>
</object>
<object class="GtkTreeModelSort" id="SystemSort">
<property name="model">SystemFilter</property>
</object>
<object class="GtkListStore" id="TimersList">
<columns>
<!-- column-name gchararray1 -->
@ -356,11 +361,16 @@
<column type="gchararray"/>
<!-- column-name Tooltip -->
<column type="gchararray"/>
<!-- column-name UnitStateUnlocalised -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="UserFilter">
<property name="child-model">UserList</property>
</object>
<object class="GtkTreeModelSort" id="UserSort">
<property name="model">UserFilter</property>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -369,12 +379,12 @@
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.stop-symbolic</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.move-away-symbolic</property>
</object>
<object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.play-symbolic</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic</property>
</object>
<object class="GtkImage" id="image12">
<property name="visible">True</property>
@ -411,6 +421,11 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.properties-symbolic</property>
</object>
<object class="GtkImage" id="image19">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.sync-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -429,7 +444,17 @@
<object class="GtkImage" id="image22">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.sync-symbolic</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.sync-symbolic</property>
</object>
<object class="GtkImage" id="image23">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.sync-symbolic</property>
</object>
<object class="GtkImage" id="image24">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.move-in-symbolic</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
@ -464,7 +489,7 @@
<object class="GtkImage" id="image9">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-services.lock-symbolic</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.changes-prevent-symbolic</property>
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore3"/>
@ -760,7 +785,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service information</property>
<property name="tooltip-text" translatable="yes">Unit information</property>
<property name="image">image3</property>
<style>
<class name="thin"/>
@ -778,7 +803,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service log</property>
<property name="tooltip-text" translatable="yes">Unit log</property>
<property name="image">image4</property>
<style>
<class name="thin"/>
@ -796,7 +821,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service source file</property>
<property name="tooltip-text" translatable="yes">Unit source file</property>
<property name="image">image5</property>
<style>
<class name="thin"/>
@ -814,7 +839,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service properties</property>
<property name="tooltip-text" translatable="yes">Unit properties</property>
<property name="image">image7</property>
<style>
<class name="thin"/>
@ -843,7 +868,7 @@
<property name="can-focus">True</property>
<property name="focus-on-click">False</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show...</property>
<property name="tooltip-text" translatable="yes">Additional information</property>
<property name="popup">menu1</property>
<child>
<object class="GtkImage">
@ -911,6 +936,7 @@
<object class="GtkTreeViewColumn">
<property name="sizing">autosize</property>
<property name="title" translatable="yes">Service</property>
<property name="clickable">True</property>
</object>
</child>
</object>
@ -941,6 +967,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Autostart</property>
<property name="clickable">True</property>
<property name="sort-column-id">0</property>
<child>
<object class="GtkCellRendererToggle" id="ConfigAutostartCell"/>
<attributes>
@ -955,6 +983,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Autostop</property>
<property name="clickable">True</property>
<property name="sort-column-id">1</property>
<child>
<object class="GtkCellRendererToggle" id="ConfigAutostopCell"/>
<attributes>
@ -969,6 +999,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Block</property>
<property name="clickable">True</property>
<property name="sort-column-id">2</property>
<child>
<object class="GtkCellRendererToggle" id="ConfigBlockCell"/>
<attributes>
@ -983,6 +1015,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Autostart</property>
<property name="clickable">True</property>
<property name="sort-column-id">3</property>
<child>
<object class="GtkCellRendererToggle" id="SystemAutostartCell"/>
<attributes>
@ -997,6 +1031,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Launched</property>
<property name="clickable">True</property>
<property name="sort-column-id">4</property>
<child>
<object class="GtkCellRendererToggle" id="SystemLaunchedCell"/>
<attributes>
@ -1011,6 +1047,8 @@
<property name="fixed-width">10</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Unit</property>
<property name="clickable">True</property>
<property name="sort-column-id">5</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
@ -1025,6 +1063,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes"> </property>
<property name="clickable">True</property>
<property name="sort-column-id">6</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
@ -1365,7 +1405,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service information</property>
<property name="tooltip-text" translatable="yes">Unit information</property>
<property name="image">image15</property>
<style>
<class name="thin"/>
@ -1383,7 +1423,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service log</property>
<property name="tooltip-text" translatable="yes">Unit log</property>
<property name="image">image16</property>
<style>
<class name="thin"/>
@ -1401,7 +1441,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service source file</property>
<property name="tooltip-text" translatable="yes">Unit source file</property>
<property name="image">image17</property>
<style>
<class name="thin"/>
@ -1419,7 +1459,7 @@
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show service properties</property>
<property name="tooltip-text" translatable="yes">Unit properties</property>
<property name="image">image18</property>
<style>
<class name="thin"/>
@ -1448,7 +1488,7 @@
<property name="can-focus">True</property>
<property name="focus-on-click">False</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Show...</property>
<property name="tooltip-text" translatable="yes">Additional information</property>
<property name="popup">menu2</property>
<child>
<object class="GtkImage">
@ -1512,6 +1552,7 @@
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Service</property>
<property name="clickable">True</property>
</object>
</child>
</object>
@ -1542,6 +1583,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Autostart</property>
<property name="clickable">True</property>
<property name="sort-column-id">0</property>
<child>
<object class="GtkCellRendererToggle" id="UserConfigAutostartCell"/>
<attributes>
@ -1556,6 +1599,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Autostop</property>
<property name="clickable">True</property>
<property name="sort-column-id">1</property>
<child>
<object class="GtkCellRendererToggle" id="UserConfigAutostopCell"/>
<attributes>
@ -1570,6 +1615,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Block</property>
<property name="clickable">True</property>
<property name="sort-column-id">2</property>
<child>
<object class="GtkCellRendererToggle" id="UserConfigBlockCell"/>
<attributes>
@ -1584,6 +1631,7 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Autostart</property>
<property name="clickable">True</property>
<child>
<object class="GtkCellRendererToggle" id="UserSystemAutostartCell"/>
<attributes>
@ -1598,6 +1646,8 @@
<property name="sizing">fixed</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Launched</property>
<property name="clickable">True</property>
<property name="sort-column-id">4</property>
<child>
<object class="GtkCellRendererToggle" id="UserSystemLaunchedCell"/>
<attributes>
@ -1612,6 +1662,8 @@
<property name="fixed-width">10</property>
<property name="min-width">20</property>
<property name="title" translatable="yes">Unit</property>
<property name="clickable">True</property>
<property name="sort-column-id">5</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
@ -1626,6 +1678,8 @@
<property name="min-width">20</property>
<property name="title" translatable="yes"> </property>
<property name="expand">True</property>
<property name="clickable">True</property>
<property name="sort-column-id">6</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
@ -1782,6 +1836,24 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="ConfigUpdateButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image23</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="ConfigEditButton">
<property name="visible">True</property>
@ -1796,7 +1868,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
</object>
@ -1943,13 +2015,13 @@
</packing>
</child>
<child>
<object class="GtkButton" id="SessionStartButton">
<object class="GtkButton" id="SessionSwitchButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Activate session</property>
<property name="image">image11</property>
<property name="tooltip-text" translatable="yes">Switch to session</property>
<property name="image">image24</property>
<style>
<class name="thin"/>
</style>
@ -1961,13 +2033,13 @@
</packing>
</child>
<child>
<object class="GtkButton" id="SessionStopButton">
<object class="GtkButton" id="SessionBlockButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Terminate session</property>
<property name="image">image10</property>
<property name="tooltip-text" translatable="yes">Lock session</property>
<property name="image">image9</property>
<style>
<class name="thin"/>
</style>
@ -1979,13 +2051,13 @@
</packing>
</child>
<child>
<object class="GtkButton" id="SessionBlockButton">
<object class="GtkButton" id="SessionStartButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Lock session</property>
<property name="image">image9</property>
<property name="tooltip-text" translatable="yes">Unlock session</property>
<property name="image">image11</property>
<style>
<class name="thin"/>
</style>
@ -1996,6 +2068,24 @@
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SessionStopButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Terminate session</property>
<property name="image">image10</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -2085,8 +2175,7 @@
<child>
<object class="GtkTreeViewColumn">
<property name="min-width">20</property>
<property name="title" translatable="yes">Seat ID | TTY</property>
<property name="expand">True</property>
<property name="title" translatable="yes">Seat ID</property>
<property name="sort-column-id">4</property>
<child>
<object class="GtkCellRendererText"/>
@ -2096,6 +2185,19 @@
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="min-width">20</property>
<property name="title" translatable="yes">TTY</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
@ -2134,7 +2236,37 @@
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="TimersUpdateButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update</property>
<property name="image">image19</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
@ -2254,7 +2386,7 @@
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
</object>

@ -77,7 +77,7 @@ msgstr ""
msgid "User services only"
msgstr ""
#: source/ubl-strings.h:19 source/ubl-strings.h:61
#: source/ubl-strings.h:19 source/ubl-strings.h:62
msgid "Saving..."
msgstr ""
@ -137,7 +137,7 @@ msgstr ""
msgid "Service:"
msgstr ""
#: source/ubl-strings.h:37 source/ubl-strings.h:159
#: source/ubl-strings.h:37 source/ubl-strings.h:179
msgid "Description:"
msgstr ""
@ -170,351 +170,428 @@ msgid "Properties"
msgstr ""
#: source/ubl-strings.h:53
msgid "Activate session"
msgid "Switch to session"
msgstr ""
#: source/ubl-strings.h:54
msgid "Terminate session"
msgstr ""
#: source/ubl-strings.h:55
msgid "Block session"
#: source/ubl-strings.h:55 source/ubl-strings.h:139
msgid "Lock session"
msgstr ""
#: source/ubl-strings.h:57
msgid "Service source were not loaded"
#: source/ubl-strings.h:56
msgid "Unlock session"
msgstr ""
#: source/ubl-strings.h:58
msgid "Failed to launch service"
msgid "Service source were not loaded"
msgstr ""
#: source/ubl-strings.h:59
msgid "Failed to launch service"
msgstr ""
#: source/ubl-strings.h:60
msgid "Failed to stop service"
msgstr ""
#: source/ubl-strings.h:62
#: source/ubl-strings.h:63
msgid "Saved"
msgstr ""
#: source/ubl-strings.h:63
#: source/ubl-strings.h:64
msgid "Error has occured"
msgstr ""
#: source/ubl-strings.h:65
#: source/ubl-strings.h:66
msgid "Service were not stopped"
msgstr ""
#: source/ubl-strings.h:66
#: source/ubl-strings.h:67
msgid "Are you sure want to stop "
msgstr ""
#: source/ubl-strings.h:66 source/ubl-strings.h:67 source/ubl-strings.h:68
#: source/ubl-strings.h:69 source/ubl-strings.h:70 source/ubl-strings.h:71
#: source/ubl-strings.h:67 source/ubl-strings.h:68 source/ubl-strings.h:69
#: source/ubl-strings.h:70 source/ubl-strings.h:71 source/ubl-strings.h:72
#: source/ubl-strings.h:73 source/ubl-strings.h:74
msgid "The system may become unstable."
msgstr ""
#: source/ubl-strings.h:67
#: source/ubl-strings.h:68
msgid "Are you sure want to start "
msgstr ""
#: source/ubl-strings.h:68
#: source/ubl-strings.h:69
msgid "Are you sure want to restart "
msgstr ""
#: source/ubl-strings.h:69
#: source/ubl-strings.h:70
msgid "Are you sure want to reload "
msgstr ""
#: source/ubl-strings.h:70
#: source/ubl-strings.h:71
msgid "Are you sure want to enable "
msgstr ""
#: source/ubl-strings.h:71
#: source/ubl-strings.h:72
msgid "Are you sure want to disable "
msgstr ""
#: source/ubl-strings.h:72
#: source/ubl-strings.h:73
msgid "Are you sure want to reload system units settings?"
msgstr ""
#: source/ubl-strings.h:74
msgid "Are you sure want to reload user units settings?"
msgstr ""
#: source/ubl-strings.h:75
msgid "Are you sure you want to switch on session"
msgstr ""
#: source/ubl-strings.h:76
msgid "Attention!"
msgstr ""
#: source/ubl-strings.h:76
msgid "You are about to"
msgstr ""
msgstr ""
#: source/ubl-strings.h:76
msgid "end your session"
msgstr ""
#: source/ubl-strings.h:76
msgid ""
"If this is your active session, you will be taken to the login screen. Make "
"sure to save all files before performing this operation."
msgstr ""
#: source/ubl-strings.h:77
msgid "Are you sure you want to block session"
msgstr ""
#: source/ubl-strings.h:78
msgid "Are you sure you want to unlock session"
msgstr ""
#: source/ubl-strings.h:80
msgid "Service start"
msgstr ""
#: source/ubl-strings.h:81
msgid "Service stop"
msgstr ""
#: source/ubl-strings.h:82
msgid "Service enabling"
msgstr ""
#: source/ubl-strings.h:83
msgid "Service disabling"
msgstr ""
#: source/ubl-strings.h:85
msgid "Switching to session"
msgstr ""
#: source/ubl-strings.h:86
msgid "Session locking"
msgstr ""
#: source/ubl-strings.h:87
msgid "Session unlocking"
msgstr ""
#: source/ubl-strings.h:88
msgid "Session termination"
msgstr ""
#: source/ubl-strings.h:90
msgid "Days"
msgstr ""
#: source/ubl-strings.h:73
#: source/ubl-strings.h:91
msgid "Hours"
msgstr ""
#: source/ubl-strings.h:74
#: source/ubl-strings.h:92
msgid "Minutes"
msgstr ""
#: source/ubl-strings.h:75
#: source/ubl-strings.h:93
msgid "Seconds"
msgstr ""
#: source/ubl-strings.h:77
#: source/ubl-strings.h:95
msgid "Active"
msgstr ""
#: source/ubl-strings.h:78
#: source/ubl-strings.h:96
msgid "Inactive"
msgstr ""
#: source/ubl-strings.h:80
#: source/ubl-strings.h:98
msgid "System units"
msgstr ""
#: source/ubl-strings.h:81
#: source/ubl-strings.h:99
msgid "User units"
msgstr ""
#: source/ubl-strings.h:82
#: source/ubl-strings.h:100
msgid "Config files"
msgstr ""
#: source/ubl-strings.h:83
#: source/ubl-strings.h:101
msgid "Sessions"
msgstr ""
#: source/ubl-strings.h:84
#: source/ubl-strings.h:102
msgid "Timers"
msgstr ""
#: source/ubl-strings.h:86
#: source/ubl-strings.h:104
msgid "System services status"
msgstr ""
#: source/ubl-strings.h:87
#: source/ubl-strings.h:105
msgid "User services status"
msgstr ""
#: source/ubl-strings.h:88
#: source/ubl-strings.h:106
msgid "Installed unit files"
msgstr ""
#: source/ubl-strings.h:89
#: source/ubl-strings.h:107
msgid "Units and status list"
msgstr ""
#: source/ubl-strings.h:90
#: source/ubl-strings.h:108
msgid "Sockets and status list"
msgstr ""
#: source/ubl-strings.h:91
#: source/ubl-strings.h:109
msgid "Timers and status list"
msgstr ""
#: source/ubl-strings.h:93
#: source/ubl-strings.h:111
msgid "Unit"
msgstr ""
#: source/ubl-strings.h:95
#: source/ubl-strings.h:113
msgid "Reload settings"
msgstr ""
#: source/ubl-strings.h:96
#: source/ubl-strings.h:114
msgid "Reexec systemd"
msgstr ""
#: source/ubl-strings.h:97
msgid "Show service information"
#: source/ubl-strings.h:115
msgid "Service information"
msgstr ""
#: source/ubl-strings.h:98
#: source/ubl-strings.h:116
msgid "Relaunch with new configuration"
msgstr ""
#: source/ubl-strings.h:99
msgid "Show service log"
#: source/ubl-strings.h:117
msgid "Service log"
msgstr ""
#: source/ubl-strings.h:100
msgid "Show service source file"
#: source/ubl-strings.h:118
msgid "Service source file"
msgstr ""
#: source/ubl-strings.h:101
msgid "Show service properties"
#: source/ubl-strings.h:119
msgid "Service properties"
msgstr ""
#: source/ubl-strings.h:102
msgid "Show..."
#: source/ubl-strings.h:120
msgid "Additional information"
msgstr ""
#: source/ubl-strings.h:104
#: source/ubl-strings.h:122
msgid "Edit configuration file"
msgstr ""
#: source/ubl-strings.h:106
#: source/ubl-strings.h:124
msgid "Show inactive"
msgstr ""
#: source/ubl-strings.h:107
#: source/ubl-strings.h:125
msgid "Show unloaded"
msgstr ""
#: source/ubl-strings.h:109
#: source/ubl-strings.h:127
msgid "File"
msgstr ""
#: source/ubl-strings.h:110
#: source/ubl-strings.h:128
msgid "Change date"
msgstr ""
#: source/ubl-strings.h:111
#: source/ubl-strings.h:129
msgid "Description"
msgstr ""
#: source/ubl-strings.h:112
#: source/ubl-strings.h:130
msgid "Edit"
msgstr ""
#: source/ubl-strings.h:114
#: source/ubl-strings.h:132
msgid "Session ID"
msgstr ""
#: source/ubl-strings.h:115
#: source/ubl-strings.h:133
msgid "User ID"
msgstr ""
#: source/ubl-strings.h:116
#: source/ubl-strings.h:134
msgid "User name"
msgstr ""
#: source/ubl-strings.h:117
#: source/ubl-strings.h:135
msgid "Seat ID"
msgstr ""
#: source/ubl-strings.h:119
#: source/ubl-strings.h:137
msgid "Start session"
msgstr ""
#: source/ubl-strings.h:120
#: source/ubl-strings.h:138
msgid "Stop session"
msgstr ""
#: source/ubl-strings.h:121
msgid "Lock session"
msgstr ""
#: source/ubl-strings.h:123
#: source/ubl-strings.h:141
msgid "Timer"
msgstr ""
#: source/ubl-strings.h:124
#: source/ubl-strings.h:142
msgid "Next"
msgstr ""
#: source/ubl-strings.h:125
#: source/ubl-strings.h:143
msgid "Left"
msgstr ""
#: source/ubl-strings.h:126
#: source/ubl-strings.h:144
msgid "Last"
msgstr ""
#: source/ubl-strings.h:127
#: source/ubl-strings.h:145
msgid "Passed"
msgstr ""
#: source/ubl-strings.h:128
#: source/ubl-strings.h:146
msgid "Activates"
msgstr ""
#: source/ubl-strings.h:130
#: source/ubl-strings.h:148 source/ubl-settings-services.c:1377
#: source/ubl-settings-services.c:1427
msgid "disabled"
msgstr ""
#: source/ubl-strings.h:149
msgid "active"
msgstr ""
#: source/ubl-strings.h:131
#: source/ubl-strings.h:150
msgid "dead"
msgstr ""
#: source/ubl-strings.h:132
#: source/ubl-strings.h:151
msgid "waiting"
msgstr ""
#: source/ubl-strings.h:133
#: source/ubl-strings.h:152
msgid "running"
msgstr ""
#: source/ubl-strings.h:134
#: source/ubl-strings.h:153
msgid "listening"
msgstr ""
#: source/ubl-strings.h:135
#: source/ubl-strings.h:154
msgid "exited"
msgstr ""
#: source/ubl-strings.h:136
#: source/ubl-strings.h:155
msgid "mounted"
msgstr ""
#: source/ubl-strings.h:137
#: source/ubl-strings.h:156
msgid "plugged"
msgstr ""
#: source/ubl-strings.h:138
#: source/ubl-strings.h:157
msgid "abandoned"
msgstr ""
#: source/ubl-strings.h:140
#: source/ubl-strings.h:159
msgid "State of "
msgstr ""
#: source/ubl-strings.h:141
#: source/ubl-strings.h:160
msgid "View log"
msgstr ""
#: source/ubl-strings.h:141
msgid "log"
msgstr ""
#: source/ubl-strings.h:142
#: source/ubl-strings.h:161
msgid "Edit unit file"
msgstr ""
#: source/ubl-strings.h:144
#: source/ubl-strings.h:163
msgid "Failed to re-execute systemd"
msgstr ""
#: source/ubl-strings.h:145
#: source/ubl-strings.h:164
msgid "failed to relaunch systemd"
msgstr ""
#: source/ubl-strings.h:147
#: source/ubl-strings.h:166
msgid "Systemd has been re-executed"
msgstr ""
#: source/ubl-strings.h:148
#: source/ubl-strings.h:167
msgid "Systemd has been relaunched"
msgstr ""
#: source/ubl-strings.h:150
#: source/ubl-strings.h:169
msgid "Service has been successfully restarted"
msgstr ""
#: source/ubl-strings.h:152
#: source/ubl-strings.h:170
msgid "Service has been successfully launched"
msgstr ""
#: source/ubl-strings.h:172
msgid "Save"
msgstr ""
#: source/ubl-strings.h:153
#: source/ubl-strings.h:173
msgid "Null"
msgstr ""
#: source/ubl-strings.h:154 source/ubl-strings.h:159
#: source/ubl-strings.h:174 source/ubl-strings.h:179
msgid "Unit file:"
msgstr ""
#: source/ubl-strings.h:155
#: source/ubl-strings.h:175
msgid "Unit file state:"
msgstr ""
#: source/ubl-strings.h:156 source/ubl-strings.h:159
#: source/ubl-strings.h:176 source/ubl-strings.h:179
msgid "Activated:"
msgstr ""
#: source/ubl-strings.h:157 source/ubl-strings.h:159
#: source/ubl-strings.h:177 source/ubl-strings.h:179
msgid "Deactivated:"
msgstr ""
#: source/ubl-strings.h:159
#: source/ubl-strings.h:179
msgid "Status:"
msgstr ""

@ -77,7 +77,7 @@ msgstr "Только системные сервисы"
msgid "User services only"
msgstr "Только сервисы пользователя"
#: source/ubl-strings.h:19 source/ubl-strings.h:61
#: source/ubl-strings.h:19 source/ubl-strings.h:62
msgid "Saving..."
msgstr "Сохранение..."
@ -137,7 +137,7 @@ msgstr "Открыть лог сервиса"
msgid "Service:"
msgstr "Сервис:"
#: source/ubl-strings.h:37 source/ubl-strings.h:159
#: source/ubl-strings.h:37 source/ubl-strings.h:179
msgid "Description:"
msgstr "Описание:"
@ -170,354 +170,430 @@ msgid "Properties"
msgstr "Свойства"
#: source/ubl-strings.h:53
msgid "Activate session"
msgstr "Активировать сессию"
msgid "Switch to session"
msgstr "Переключиться на сессию"
#: source/ubl-strings.h:54
msgid "Terminate session"
msgstr "Завершить сессию"
#: source/ubl-strings.h:55
msgid "Block session"
#: source/ubl-strings.h:55 source/ubl-strings.h:139
msgid "Lock session"
msgstr "Заблокировать сессию"
#: source/ubl-strings.h:57
#: source/ubl-strings.h:56
msgid "Unlock session"
msgstr "Разблокировать сессию"
#: source/ubl-strings.h:58
msgid "Service source were not loaded"
msgstr "Сервис не был загружен"
#: source/ubl-strings.h:58
#: source/ubl-strings.h:59
msgid "Failed to launch service"
msgstr "Ошибка запуска сервиса"
#: source/ubl-strings.h:59
#: source/ubl-strings.h:60
msgid "Failed to stop service"
msgstr "Ошибка остановки сервиса"
#: source/ubl-strings.h:62
#: source/ubl-strings.h:63
msgid "Saved"
msgstr "Сохранено"
#: source/ubl-strings.h:63
#: source/ubl-strings.h:64
msgid "Error has occured"
msgstr "Произошла ошибка"
#: source/ubl-strings.h:65
#: source/ubl-strings.h:66
msgid "Service were not stopped"
msgstr "Сервис не был остановлен"
#: source/ubl-strings.h:66
#: source/ubl-strings.h:67
msgid "Are you sure want to stop "
msgstr "Вы уверены, что хотите выключить "
#: source/ubl-strings.h:66 source/ubl-strings.h:67 source/ubl-strings.h:68
#: source/ubl-strings.h:69 source/ubl-strings.h:70 source/ubl-strings.h:71
#: source/ubl-strings.h:67 source/ubl-strings.h:68 source/ubl-strings.h:69
#: source/ubl-strings.h:70 source/ubl-strings.h:71 source/ubl-strings.h:72
#: source/ubl-strings.h:73 source/ubl-strings.h:74
msgid "The system may become unstable."
msgstr "Возможна нестабильная работа системы."
#: source/ubl-strings.h:67
#: source/ubl-strings.h:68
msgid "Are you sure want to start "
msgstr "Вы уверены, что хотите запустить "
#: source/ubl-strings.h:68
#: source/ubl-strings.h:69
msgid "Are you sure want to restart "
msgstr "Вы уверены, что хотите перезапустить "
#: source/ubl-strings.h:69
#: source/ubl-strings.h:70
msgid "Are you sure want to reload "
msgstr "Вы уверены, что хотите перезагрузить "
#: source/ubl-strings.h:70
#, fuzzy
#: source/ubl-strings.h:71
msgid "Are you sure want to enable "
msgstr "Вы уверены, что хотите включить автозапуск для "
#: source/ubl-strings.h:71
#, fuzzy
#: source/ubl-strings.h:72
msgid "Are you sure want to disable "
msgstr "Вы уверены, что хотите отключить автозапуск для "
#: source/ubl-strings.h:72
#: source/ubl-strings.h:73
msgid "Are you sure want to reload system units settings?"
msgstr "Вы уверены, что хотите перезагрузить настройки системных юнитов?"
#: source/ubl-strings.h:74
msgid "Are you sure want to reload user units settings?"
msgstr ""
"Вы уверены, что хотите перезагрузить настройки пользовательских юнитов?"
#: source/ubl-strings.h:75
msgid "Are you sure you want to switch on session"
msgstr "Вы уверены, что хотите переключиться на сессию"
#: source/ubl-strings.h:76
msgid "Attention!"
msgstr "Внимание!"
#: source/ubl-strings.h:76
msgid "You are about to"
msgstr "Вы собираетесь"
#: source/ubl-strings.h:76
msgid "end your session"
msgstr "завершить сессию"
#: source/ubl-strings.h:76
msgid ""
"If this is your active session, you will be taken to the login screen. Make "
"sure to save all files before performing this operation."
msgstr ""
"Если это ваша активная сессия, вы будете выведены в экран входа. Убедитесь, "
"что сохранили все файлы перед выполнением этой операции."
#: source/ubl-strings.h:77
msgid "Are you sure you want to block session"
msgstr "Вы уверены, что хотите заблокировать сессию"
#: source/ubl-strings.h:78
msgid "Are you sure you want to unlock session"
msgstr "Вы уверены, что хотите разблокировать сессию"
#: source/ubl-strings.h:80
msgid "Service start"
msgstr "Запуск юнита"
#: source/ubl-strings.h:81
msgid "Service stop"
msgstr "Остановка юнита"
#: source/ubl-strings.h:82
msgid "Service enabling"
msgstr "Включение автообновления юнита"
#: source/ubl-strings.h:83
msgid "Service disabling"
msgstr "Отключение автообновления юнита"
#: source/ubl-strings.h:85
msgid "Switching to session"
msgstr "Переключение на сессию"
#: source/ubl-strings.h:86
msgid "Session locking"
msgstr "Блокирование сессии"
#: source/ubl-strings.h:87
msgid "Session unlocking"
msgstr "Разблакирование сессии"
#: source/ubl-strings.h:88
msgid "Session termination"
msgstr "Завершение сессии"
#: source/ubl-strings.h:90
msgid "Days"
msgstr "Дней"
#: source/ubl-strings.h:73
#: source/ubl-strings.h:91
msgid "Hours"
msgstr "Часов"
#: source/ubl-strings.h:74
#: source/ubl-strings.h:92
msgid "Minutes"
msgstr "Минут"
#: source/ubl-strings.h:75
#: source/ubl-strings.h:93
msgid "Seconds"
msgstr "Секунд"
#: source/ubl-strings.h:77
#: source/ubl-strings.h:95
msgid "Active"
msgstr "Активна"
#: source/ubl-strings.h:78
#: source/ubl-strings.h:96
msgid "Inactive"
msgstr "Неактивна"
#: source/ubl-strings.h:80
#: source/ubl-strings.h:98
msgid "System units"
msgstr "Системные юниты"
#: source/ubl-strings.h:81
#: source/ubl-strings.h:99
msgid "User units"
msgstr "Пользовательские юниты"
#: source/ubl-strings.h:82
#: source/ubl-strings.h:100
msgid "Config files"
msgstr "Конфигурационные файлы"
#: source/ubl-strings.h:83
#: source/ubl-strings.h:101
msgid "Sessions"
msgstr "Сессии"
#: source/ubl-strings.h:84
#: source/ubl-strings.h:102
msgid "Timers"
msgstr "Таймеры"
#: source/ubl-strings.h:86
#: source/ubl-strings.h:104
msgid "System services status"
msgstr "Статус сервисов системы"
#: source/ubl-strings.h:87
#: source/ubl-strings.h:105
msgid "User services status"
msgstr "Статус сервисов пользователя"
#: source/ubl-strings.h:88
#: source/ubl-strings.h:106
msgid "Installed unit files"
msgstr "Установленные юнит-файлы"
#: source/ubl-strings.h:89
#: source/ubl-strings.h:107
msgid "Units and status list"
msgstr "Список юнитов и состояния"
#: source/ubl-strings.h:90
#: source/ubl-strings.h:108
msgid "Sockets and status list"
msgstr "Список сокетов и состояния"
#: source/ubl-strings.h:91
#: source/ubl-strings.h:109
msgid "Timers and status list"
msgstr "Список таймеров и состояния"
#: source/ubl-strings.h:93
#: source/ubl-strings.h:111
msgid "Unit"
msgstr "Юнит"
#: source/ubl-strings.h:95
#: source/ubl-strings.h:113
msgid "Reload settings"
msgstr "Перезагрузить настройки"
#: source/ubl-strings.h:96
#: source/ubl-strings.h:114
msgid "Reexec systemd"
msgstr "Перезапустить systemd"
#: source/ubl-strings.h:97
msgid "Show service information"
msgstr "Показать информацию о сервисе"
#: source/ubl-strings.h:115
msgid "Service information"
msgstr "Информация о юните"
#: source/ubl-strings.h:98
#, fuzzy
#: source/ubl-strings.h:116
msgid "Relaunch with new configuration"
msgstr "Перезапустить с новой конфигурацией"
#: source/ubl-strings.h:99
msgid "Show service log"
msgstr "Открыть лог сервиса"
#: source/ubl-strings.h:117
msgid "Service log"
msgstr "Лог юнита"
#: source/ubl-strings.h:100
msgid "Show service source file"
msgstr "Показать конфигурационный файл сервиса"
#: source/ubl-strings.h:118
msgid "Service source file"
msgstr "Конфигурационный файл юнита"
#: source/ubl-strings.h:101
msgid "Show service properties"
msgstr "Открыть свойства сервиса"
#: source/ubl-strings.h:119
msgid "Service properties"
msgstr "Свойства юнита"
#: source/ubl-strings.h:102
msgid "Show..."
msgstr "Показать..."
#: source/ubl-strings.h:120
msgid "Additional information"
msgstr "Дополнительная информация"
#: source/ubl-strings.h:104
#: source/ubl-strings.h:122
msgid "Edit configuration file"
msgstr "Редактировать в конфигурации"
msgstr "Редактировать конфигурационный файл"
#: source/ubl-strings.h:106
#: source/ubl-strings.h:124
msgid "Show inactive"
msgstr "Показать неактивные"
#: source/ubl-strings.h:107
#: source/ubl-strings.h:125
msgid "Show unloaded"
msgstr "Показать незагруженные"
#: source/ubl-strings.h:109
#: source/ubl-strings.h:127
msgid "File"
msgstr "Файл"
#: source/ubl-strings.h:110
#: source/ubl-strings.h:128
msgid "Change date"
msgstr "Изменён"
#: source/ubl-strings.h:111
#: source/ubl-strings.h:129
msgid "Description"
msgstr "Описание"
#: source/ubl-strings.h:112
#: source/ubl-strings.h:130
msgid "Edit"
msgstr "Редактировать"
#: source/ubl-strings.h:114
#: source/ubl-strings.h:132
msgid "Session ID"
msgstr "ID сессии"
#: source/ubl-strings.h:115
#: source/ubl-strings.h:133
msgid "User ID"
msgstr "ID пользователя"
#: source/ubl-strings.h:116
#: source/ubl-strings.h:134
msgid "User name"
msgstr "Имя пользователя"
#: source/ubl-strings.h:117
#: source/ubl-strings.h:135
msgid "Seat ID"
msgstr "Seat ID"
#: source/ubl-strings.h:119
#: source/ubl-strings.h:137
msgid "Start session"
msgstr "Запустить сессию"
#: source/ubl-strings.h:120
#: source/ubl-strings.h:138
msgid "Stop session"
msgstr "Остановить сессию"
#: source/ubl-strings.h:121
msgid "Lock session"
msgstr "Заблокировать сессию"
#: source/ubl-strings.h:123
#: source/ubl-strings.h:141
msgid "Timer"
msgstr "Таймер"
#: source/ubl-strings.h:124
#: source/ubl-strings.h:142
msgid "Next"
msgstr "Следующий"
#: source/ubl-strings.h:125
#: source/ubl-strings.h:143
msgid "Left"
msgstr "Осталось времени"
#: source/ubl-strings.h:126
#: source/ubl-strings.h:144
msgid "Last"
msgstr "Последний"
#: source/ubl-strings.h:127
#: source/ubl-strings.h:145
msgid "Passed"
msgstr "Пройденный"
#: source/ubl-strings.h:128
#: source/ubl-strings.h:146
msgid "Activates"
msgstr "Активируется"
#: source/ubl-strings.h:130
#: source/ubl-strings.h:148 source/ubl-settings-services.c:1377
#: source/ubl-settings-services.c:1427
msgid "disabled"
msgstr "неактивен"
#: source/ubl-strings.h:149
msgid "active"
msgstr "активен"
#: source/ubl-strings.h:131
#: source/ubl-strings.h:150
msgid "dead"
msgstr "остановлен"
#: source/ubl-strings.h:132
#: source/ubl-strings.h:151
msgid "waiting"
msgstr "ожидание"
#: source/ubl-strings.h:133
#: source/ubl-strings.h:152
msgid "running"
msgstr "работает"
#: source/ubl-strings.h:134
#: source/ubl-strings.h:153
msgid "listening"
msgstr "прослушивание"
#: source/ubl-strings.h:135
#: source/ubl-strings.h:154
msgid "exited"
msgstr "завершён"
#: source/ubl-strings.h:136
#: source/ubl-strings.h:155
msgid "mounted"
msgstr "примонтирован"
#: source/ubl-strings.h:137
#: source/ubl-strings.h:156
msgid "plugged"
msgstr "подключен"
#: source/ubl-strings.h:138
#: source/ubl-strings.h:157
msgid "abandoned"
msgstr "заброшен"
#: source/ubl-strings.h:140
#: source/ubl-strings.h:159
msgid "State of "
msgstr "Состояние "
#: source/ubl-strings.h:141
#: source/ubl-strings.h:160
msgid "View log"
msgstr "Просмотр лога"
#: source/ubl-strings.h:141
msgid "log"
msgstr "лога"
#: source/ubl-strings.h:142
#: source/ubl-strings.h:161
msgid "Edit unit file"
msgstr "Редактировать юнит-файл"
#: source/ubl-strings.h:144
#: source/ubl-strings.h:163
msgid "Failed to re-execute systemd"
msgstr "Ошибка перезагрузки systemd"
#: source/ubl-strings.h:145
#: source/ubl-strings.h:164
msgid "failed to relaunch systemd"
msgstr "Ошибка перезапуска systemd"
#: source/ubl-strings.h:147
#: source/ubl-strings.h:166
msgid "Systemd has been re-executed"
msgstr "Systemd был успешно перезапущен"
#: source/ubl-strings.h:148
#: source/ubl-strings.h:167
msgid "Systemd has been relaunched"
msgstr "Systemd был успешно перезагружен"
#: source/ubl-strings.h:150
#: source/ubl-strings.h:169
msgid "Service has been successfully restarted"
msgstr "Сервис был успешно перезапущен"
#: source/ubl-strings.h:152
#: source/ubl-strings.h:170
msgid "Service has been successfully launched"
msgstr "Сервис был успешно запущен"
#: source/ubl-strings.h:172
msgid "Save"
msgstr "Сохранить"
#: source/ubl-strings.h:153
#: source/ubl-strings.h:173
msgid "Null"
msgstr "Нет данных"
#: source/ubl-strings.h:154 source/ubl-strings.h:159
#: source/ubl-strings.h:174 source/ubl-strings.h:179
msgid "Unit file:"
msgstr "Юнит-файл:"
#: source/ubl-strings.h:155
#: source/ubl-strings.h:175
msgid "Unit file state:"
msgstr "Статус юнит-файла:"
#: source/ubl-strings.h:156 source/ubl-strings.h:159
#: source/ubl-strings.h:176 source/ubl-strings.h:179
msgid "Activated:"
msgstr "Активирован:"
#: source/ubl-strings.h:157 source/ubl-strings.h:159
#: source/ubl-strings.h:177 source/ubl-strings.h:179
msgid "Deactivated:"
msgstr "Деактивирован:"
#: source/ubl-strings.h:159
#: source/ubl-strings.h:179
msgid "Status:"
msgstr "Статус:"
@ -545,7 +621,9 @@ msgstr "Настройка глобальных сетевых параметр
msgid ""
"Configuration file for systemd-pstore, a tool for archiving the contents of "
"the pstore persistent storage file system"
msgstr "Файл конфигурации для systemd-pstore, инструмента для архивирования содержимого постоянной файловой системы хранения pstore"
msgstr ""
"Файл конфигурации для systemd-pstore, инструмента для архивирования "
"содержимого постоянной файловой системы хранения pstore"
#: source/ubl-strings.h:159
msgid "Workstation hibernation options"
@ -563,22 +641,28 @@ msgstr "Конфигурация пользователя"
msgid ""
"Settings management configuration for user account home directories created "
"and managed by systemd-homed.service"
msgstr "Конфигурация управления настройками для домашних каталогов учетных записей пользователей, созданная и управляемая systemd-homed.service"
msgstr ""
"Конфигурация управления настройками для домашних каталогов учетных записей "
"пользователей, созданная и управляемая systemd-homed.service"
#: source/ubl-strings.h:159
msgid ""
"Configuration files for various systemd-journal-remote.service parameters"
msgstr "Файлы конфигурации для различных параметров systemd-journal-remote.service"
msgstr ""
"Файлы конфигурации для различных параметров systemd-journal-remote.service"
#: source/ubl-strings.h:159
msgid "Configuration files for various systemd login manager options"
msgstr "Файлы конфигурации для различных опций менеджера входа в систему systemd"
msgstr ""
"Файлы конфигурации для различных опций менеджера входа в систему systemd"
#: source/ubl-strings.h:159
msgid ""
"Configuration files for various out-of-memory (OOM) killer parameters in "
"systemd user space"
msgstr "Файлы конфигурации для различных параметров исключения нехватки памяти (OOM) в пользовательском пространстве systemd"
msgstr ""
"Файлы конфигурации для различных параметров исключения нехватки памяти (OOM) "
"в пользовательском пространстве systemd"
#: source/ubl-strings.h:159
msgid "Local DNS and LLMNR name resolution management configuration files"
@ -591,3 +675,6 @@ msgstr "Файлы конфигурации управления файлами
#: source/ubl-strings.h:159
msgid "Configuration file controlling NTP network time synchronization"
msgstr "Файл конфигурации, управляющий синхронизацией времени сети NTP"
#~ msgid "Unit log"
#~ msgstr "Лог юнита"

Loading…
Cancel
Save