44 #include <sys/utsname.h> 46 #include <glib/gstdio.h> 47 #include <gdk/gdkkeysyms.h> 65 static const gchar *
default_keymap_data =
"# Please check gdk/gdkkeysyms.h for a full list of all key names or hex key values\n" 79 g_autofree gchar *content = NULL;
82 for (i = 0; i < 32; i++)
83 s[i] = (guchar)(randombytes_uniform(257));
86 gkeyfile = g_key_file_new();
89 content = g_key_file_to_data(gkeyfile, &length, NULL);
92 g_key_file_free(gkeyfile);
103 k = gdk_keyval_from_name(str);
105 if (sscanf(str,
"%x", &k) < 1)
112 TRACE_CALL(__func__);
119 g_autofree gchar *value = NULL;
128 gkeyfile = g_key_file_new();
132 g_print(
"Failed to initialize keymap table\n");
133 g_key_file_free(gkeyfile);
138 groups = g_key_file_get_groups(gkeyfile, NULL);
141 keys = g_key_file_get_keys(gkeyfile, *gptr, &nkeys, NULL);
142 table = g_new0(guint, nkeys * 2 + 1);
150 value = g_key_file_get_string(gkeyfile, *gptr, *kptr, NULL);
161 g_key_file_free(gkeyfile);
167 GFile *src = g_file_new_for_path(src_path), *dst = g_file_new_for_path(dst_path);
169 const gboolean ok = g_file_copy(src, dst, G_FILE_COPY_NONE, NULL, NULL, NULL, NULL);
184 {
"background", &color_pref->
background,
"#d5ccba" },
185 {
"cursor", &color_pref->
cursor,
"#45373c" },
187 {
"highlight", &color_pref->
highlight,
"#45373c" },
189 {
"colorBD", &color_pref->
colorBD,
"#45373c" },
190 {
"foreground", &color_pref->
foreground,
"#45373c" },
191 {
"color0", &color_pref->
color0,
"#20111b" },
192 {
"color1", &color_pref->
color1,
"#be100e" },
193 {
"color2", &color_pref->
color2,
"#858162" },
194 {
"color3", &color_pref->
color3,
"#eaa549" },
195 {
"color4", &color_pref->
color4,
"#426a79" },
196 {
"color5", &color_pref->
color5,
"#97522c" },
197 {
"color6", &color_pref->
color6,
"#989a9c" },
198 {
"color7", &color_pref->
color7,
"#968c83" },
199 {
"color8", &color_pref->
color8,
"#5e5252" },
200 {
"color9", &color_pref->
color9,
"#be100e" },
201 {
"color10", &color_pref->
color10,
"#858162" },
202 {
"color11", &color_pref->
color11,
"#eaa549" },
203 {
"color12", &color_pref->
color12,
"#426a79" },
204 {
"color13", &color_pref->
color13,
"#97522c" },
205 {
"color14", &color_pref->
color14,
"#989a9c" },
206 {
"color15", &color_pref->
color15,
"#d5ccba" },
211 for (i = 0; i < (
sizeof(colors) /
sizeof(colors[0])); i++) {
212 if (g_key_file_has_key(gkeyfile,
"ssh_colors", colors[i].name, NULL))
213 *colors[i].setting = g_key_file_get_string(gkeyfile,
"ssh_colors", colors[i].name,
216 *colors[i].setting = colors[i].fallback;
222 TRACE_CALL(__func__);
224 gchar *remmina_dir, *remmina_pref_path, *user_config_path;
225 const gchar *filename =
"remmina.pref";
226 const gchar *colors_filename =
"remmina.colors";
229 const gchar *legacy =
".remmina";
232 remmina_dir = g_build_path(
"/", g_get_user_config_dir(),
"remmina", NULL);
234 g_mkdir_with_parents(remmina_dir, 0750);
236 g_free(remmina_dir), remmina_dir = NULL;
239 remmina_dir = g_build_path(
"/", g_get_home_dir(), legacy, NULL);
240 if (g_file_test(remmina_dir, G_FILE_TEST_IS_DIR)) {
241 dir = g_dir_open(remmina_dir, 0, NULL);
242 remmina_pref_path = g_build_path(
"/", remmina_dir, filename, NULL);
243 user_config_path = g_build_path(
"/", g_get_user_config_dir(),
244 "remmina", filename, NULL);
247 g_free(remmina_pref_path);
248 g_free(user_config_path);
252 const gchar *
const *dirs = g_get_system_config_dirs();
254 g_free(remmina_dir), remmina_dir = NULL;
255 for (i = 0; dirs[i] != NULL; ++i) {
256 remmina_dir = g_build_path(
"/", dirs[i],
"remmina", NULL);
257 if (g_file_test(remmina_dir, G_FILE_TEST_IS_DIR)) {
258 dir = g_dir_open(remmina_dir, 0, NULL);
259 while ((filename = g_dir_read_name(dir)) != NULL) {
260 remmina_pref_path = g_build_path(
"/", remmina_dir, filename, NULL);
261 user_config_path = g_build_path(
"/", g_get_user_config_dir(),
262 "remmina", filename, NULL);
264 g_free(remmina_pref_path);
265 g_free(user_config_path);
267 g_free(remmina_dir), remmina_dir = NULL;
273 if (remmina_dir != NULL)
274 g_free(remmina_dir), remmina_dir = NULL;
275 remmina_dir = g_build_path(
"/", g_get_user_config_dir(),
280 remmina_colors_file = g_strdup_printf(
"%s/%s", remmina_dir, colors_filename);
286 gkeyfile = g_key_file_new();
290 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"save_view_mode", NULL))
295 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"confirm_close", NULL))
303 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"use_master_password", NULL)) {
305 }
else if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"use_primary_password", NULL))
310 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"unlock_timeout", NULL))
315 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"unlock_password", NULL))
320 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"lock_connect", NULL))
325 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"lock_edit", NULL))
331 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"lock_view_passwords", NULL))
336 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"enc_mode", NULL))
341 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"audit", NULL))
342 remmina_pref.
audit = g_key_file_get_boolean(gkeyfile,
"remmina_pref",
"audit", NULL);
346 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"trust_all", NULL))
351 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"fullscreen_on_auto", NULL))
356 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"floating_toolbar_placement", NULL))
361 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"prevent_snap_welcome_message", NULL))
366 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"last_quickconnect_protocol", NULL))
371 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"toolbar_placement", NULL))
376 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"always_show_tab", NULL))
384 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"always_show_notes", NULL))
389 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"hide_connection_toolbar", NULL))
391 "hide_connection_toolbar", NULL);
398 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"hide_searchbar", NULL))
400 "hide_searchbar", NULL);
407 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"default_action", NULL))
412 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"scale_quality", NULL))
417 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"hide_toolbar", NULL))
422 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"small_toolbutton", NULL))
427 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"view_file_mode", NULL))
432 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"resolutions", NULL))
437 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"keystrokes", NULL))
442 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"main_width", NULL))
447 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"main_height", NULL))
452 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"main_maximize", NULL))
457 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"main_sort_column_id", NULL))
463 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"main_sort_order", NULL))
468 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"expanded_group", NULL))
473 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"toolbar_pin_down", NULL))
478 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"ssh_loglevel", NULL))
483 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"deny_screenshot_clipboard", NULL))
488 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"datadir_path", NULL))
493 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"remmina_file_name", NULL))
498 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"screenshot_path", NULL)) {
506 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"screenshot_name", NULL))
511 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"ssh_parseconfig", NULL))
516 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"sshtunnel_port", NULL))
521 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"ssh_tcp_keepidle", NULL))
526 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"ssh_tcp_keepintvl", NULL))
531 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"ssh_tcp_keepcnt", NULL))
536 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"ssh_tcp_usrtimeout", NULL))
541 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"applet_new_ontop", NULL))
546 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"applet_hide_count", NULL))
551 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"applet_enable_avahi", NULL))
557 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"disable_tray_icon", NULL))
565 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"dark_theme", NULL))
570 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"list_refresh_workaround", NULL))
575 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"grab_color_switch", NULL))
580 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"grab_color", NULL))
585 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"recent_maximum", NULL))
590 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"default_mode", NULL))
598 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"tab_mode", NULL))
603 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"fullscreen_toolbar_visibility", NULL))
611 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"auto_scroll_step", NULL))
616 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"hostkey", NULL))
621 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_fullscreen", NULL))
627 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_autofit", NULL))
633 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_nexttab", NULL))
639 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_prevtab", NULL))
645 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_scale", NULL))
650 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_clipboard", NULL))
655 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_viewonly", NULL))
660 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_multimon", NULL))
665 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_grab", NULL))
670 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_minimize", NULL))
675 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_screenshot", NULL))
680 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_disconnect", NULL))
686 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"shortcutkey_toolbar", NULL))
692 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"secret", NULL))
693 remmina_pref.
secret = g_key_file_get_string(gkeyfile,
"remmina_pref",
"secret", NULL);
697 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"uid", NULL))
698 remmina_pref.
uid = g_key_file_get_string(gkeyfile,
"remmina_pref",
"uid", NULL);
702 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_font", NULL))
707 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_allow_bold_text", NULL))
713 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_lines", NULL))
718 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_shortcutkey_copy", NULL))
724 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_shortcutkey_paste", NULL))
730 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_shortcutkey_select_all", NULL))
736 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_shortcutkey_increase_font", NULL))
742 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_shortcutkey_decrease_font", NULL))
748 if (g_key_file_has_key(gkeyfile,
"remmina_pref",
"vte_shortcutkey_search_text", NULL))
759 if (g_file_test(remmina_colors_file, G_FILE_TEST_IS_REGULAR)) {
760 g_key_file_load_from_file(gkeyfile, remmina_colors_file, G_KEY_FILE_NONE, NULL);
761 g_remove(remmina_colors_file);
765 if (!g_key_file_has_key(gkeyfile,
"remmina",
"name", NULL)) {
766 g_key_file_set_string(gkeyfile,
"remmina",
"name",
"");
767 g_key_file_set_integer(gkeyfile,
"remmina",
"ignore-tls-errors", 1);
768 g_key_file_set_integer(gkeyfile,
"remmina",
"enable-plugins", 1);
772 g_key_file_free(gkeyfile);
782 TRACE_CALL(__func__);
792 TRACE_CALL(__func__);
795 g_debug(
"remmina.pref is not writable, returning");
799 GError *error = NULL;
800 g_autofree gchar *content = NULL;
803 gkeyfile = g_key_file_new();
814 if (g_key_file_remove_key(gkeyfile,
"remmina_pref",
"use_master_password", NULL))
815 REMMINA_DEBUG(
"use_master_password removed…");
817 REMMINA_INFO(
"use_master_password already migrated");
818 #if SODIUM_VERSION_INT >= 90200 826 g_key_file_set_boolean(gkeyfile,
"remmina_pref",
"use_primary_password", FALSE);
827 g_key_file_set_integer(gkeyfile,
"remmina_pref",
"unlock_timeout", 0);
828 g_key_file_set_string(gkeyfile,
"remmina_pref",
"unlock_password", g_strdup(
""));
829 g_key_file_set_boolean(gkeyfile,
"remmina_pref",
"lock_connect", FALSE);
830 g_key_file_set_boolean(gkeyfile,
"remmina_pref",
"lock_edit", FALSE);
831 g_key_file_set_boolean(gkeyfile,
"remmina_pref",
"lock_view_passwords", FALSE);
926 g_key_file_set_string(gkeyfile,
"remmina",
"name",
"");
927 g_key_file_set_integer(gkeyfile,
"remmina",
"ignore-tls-errors", 1);
929 content = g_key_file_to_data(gkeyfile, &length, NULL);
933 g_warning(
"remmina_pref_save error: %s", error->message);
934 g_clear_error(&error);
935 g_key_file_free(gkeyfile);
938 g_key_file_free(gkeyfile);
944 TRACE_CALL(__func__);
948 g_autofree gchar *val = NULL;
949 g_autofree gchar *content = NULL;
956 gkeyfile = g_key_file_new();
960 g_snprintf(key,
sizeof(key),
"recent_%s", protocol);
971 g_key_file_set_string(gkeyfile,
"remmina_pref", key, val);
973 content = g_key_file_to_data(gkeyfile, &length, NULL);
976 g_key_file_free(gkeyfile);
982 TRACE_CALL(__func__);
987 gkeyfile = g_key_file_new();
991 g_snprintf(key,
sizeof(key),
"recent_%s", protocol);
992 val = g_key_file_get_string(gkeyfile,
"remmina_pref", key, NULL);
994 g_key_file_free(gkeyfile);
1001 TRACE_CALL(__func__);
1005 g_autofree gchar *content = NULL;
1008 gkeyfile = g_key_file_new();
1011 keys = g_key_file_get_keys(gkeyfile,
"remmina_pref", NULL, NULL);
1013 for (i = 0; keys[i]; i++)
1014 if (strncmp(keys[i],
"recent_", 7) == 0)
1015 g_key_file_set_string(gkeyfile,
"remmina_pref", keys[i],
"");
1019 content = g_key_file_to_data(gkeyfile, &length, NULL);
1022 g_key_file_free(gkeyfile);
1027 TRACE_CALL(__func__);
1029 if (!keymap || keymap[0] ==
'\0')
1037 TRACE_CALL(__func__);
1041 if (!keymap || keymap[0] ==
'\0')
1047 for (i = 0; table[i] > 0; i += 2)
1048 if (table[i] == keyval)
1049 return table[i + 1];
1056 TRACE_CALL(__func__);
1063 len = g_list_length(list);
1065 keys = g_new0(gchar *, (len + 1) * 2 + 1);
1066 keys[0] = g_strdup(
"");
1067 keys[1] = g_strdup(
"");
1068 for (i = 0; i < len; i++) {
1069 keys[(i + 1) * 2] = g_strdup((gchar *)g_list_nth_data(list, i));
1070 keys[(i + 1) * 2 + 1] = g_strdup((gchar *)g_list_nth_data(list, i));
1079 TRACE_CALL(__func__);
1088 TRACE_CALL(__func__);
1094 TRACE_CALL(__func__);
1100 TRACE_CALL(__func__);
1106 TRACE_CALL(__func__);
1112 TRACE_CALL(__func__);
1118 TRACE_CALL(__func__);
1124 TRACE_CALL(__func__);
1130 TRACE_CALL(__func__);
1134 gkeyfile = g_key_file_new();
1135 if (g_key_file_load_from_file(gkeyfile,
remmina_pref_file, G_KEY_FILE_NONE, NULL)) {
1136 g_key_file_set_string(gkeyfile,
"remmina_pref", key, value);
1137 gchar *content = g_key_file_to_data(gkeyfile, &length, NULL);
1141 REMMINA_WARNING(
"Cannot save Remmina preferences");
1142 REMMINA_WARNING(
"Key was \"%s\", and value \"%s\"", key, value);
1144 g_key_file_free(gkeyfile);
1146 REMMINA_WARNING(
"Cannot load Remmina preferences file");
1152 TRACE_CALL(__func__);
1154 gchar *value = NULL;
1156 gkeyfile = g_key_file_new();
1158 value = g_key_file_get_string(gkeyfile,
"remmina_pref", key, NULL);
1159 g_key_file_free(gkeyfile);
1166 TRACE_CALL(__func__);
1170 gkeyfile = g_key_file_new();
1172 value = g_key_file_get_boolean(gkeyfile,
"remmina_pref", key, NULL);
1173 g_key_file_free(gkeyfile);
guint shortcutkey_fullscreen
gint floating_toolbar_placement
guint vte_shortcutkey_search_text
gint remmina_pref_get_scale_quality(void)
guint shortcutkey_minimize
static void remmina_pref_gen_secret(void)
gchar ** remmina_pref_keymap_groups(void)
const gchar * default_keystrokes
guint vte_shortcutkey_increase_font
static const gchar * default_keymap_data
gchar * remmina_pref_file
G_BEGIN_DECLS typedef GPtrArray RemminaStringArray
gint remmina_pref_get_sshtunnel_port(void)
static gboolean remmina_pref_file_do_copy(const char *src_path, const char *dst_path)
guint shortcutkey_screenshot
guint shortcutkey_prevtab
gboolean use_primary_password
gchar * last_quickconnect_protocol
gint remmina_pref_get_ssh_loglevel(void)
guint vte_shortcutkey_copy
static guint remmina_pref_get_keyval_from_str(const gchar *str)
gchar * remmina_pref_get_recent(const gchar *protocol)
guint shortcutkey_autofit
gchar * highlight_foreground
gchar * remmina_string_array_to_string(RemminaStringArray *array)
void remmina_pref_add_recent(const gchar *protocol, const gchar *server)
void remmina_pref_set_value(const gchar *key, const gchar *value)
gboolean deny_screenshot_clipboard
guint vte_shortcutkey_select_all
gboolean vte_allow_bold_text
gchar * remmina_pref_get_value(const gchar *key)
gboolean disable_tray_icon
gboolean lock_view_passwords
gboolean remmina_pref_get_ssh_parseconfig(void)
static GHashTable * remmina_keymap_table
guint shortcutkey_multimon
const gchar * screenshot_path
void remmina_string_array_remove_index(RemminaStringArray *array, gint i)
guint * remmina_pref_keymap_get_table(const gchar *keymap)
gboolean prevent_snap_welcome_message
guint vte_shortcutkey_decrease_font
const gchar * unlock_password
guint vte_shortcutkey_paste
guint shortcutkey_disconnect
gboolean small_toolbutton
gboolean toolbar_pin_down
RemminaStringArray * remmina_string_array_new_from_allocated_string(gchar *strs)
guint shortcutkey_clipboard
gboolean remmina_pref_get_boolean(const gchar *key)
gint remmina_pref_get_ssh_tcp_keepcnt(void)
void remmina_pref_clear_recent(void)
const gchar * default_resolutions
guint shortcutkey_nexttab
gboolean applet_hide_count
gboolean list_refresh_workaround
guint remmina_pref_keymap_get_keyval(const gchar *keymap, guint keyval)
void remmina_string_array_remove(RemminaStringArray *array, const gchar *str)
gboolean applet_enable_avahi
const gchar * remmina_file_name
void remmina_pref_init(void)
gchar * remmina_keymap_file
guint shortcutkey_toolbar
gboolean remmina_pref_save(void)
gchar * remmina_colors_file
gboolean applet_new_ontop
const gchar * screenshot_name
gboolean hide_connection_toolbar
static void remmina_pref_init_keymap(void)
const gchar * datadir_path
gchar * cursor_foreground
gboolean remmina_pref_is_rw(void)
gboolean always_show_notes
void remmina_string_array_add(RemminaStringArray *array, const gchar *str)
RemminaColorPref color_pref
void remmina_pref_file_load_colors(GKeyFile *gkeyfile, RemminaColorPref *color_pref)
guint shortcutkey_viewonly
gboolean fullscreen_on_auto
gint fullscreen_toolbar_visibility
gint remmina_pref_get_ssh_tcp_usrtimeout(void)
gint remmina_pref_get_ssh_tcp_keepidle(void)
gboolean grab_color_switch
gint remmina_pref_get_ssh_tcp_keepintvl(void)