mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
vconsole-setup: run setfont before loadkeys
https://bugs.freedesktop.org/show_bug.cgi?id=80685
This commit is contained in:
parent
bce415edca
commit
abee28c56d
@ -238,12 +238,10 @@ static void font_copy_to_all_vcs(int fd) {
|
|||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
const char *vc;
|
const char *vc;
|
||||||
char *vc_keymap = NULL;
|
_cleanup_free_ char
|
||||||
char *vc_keymap_toggle = NULL;
|
*vc_keymap = NULL, *vc_keymap_toggle = NULL,
|
||||||
char *vc_font = NULL;
|
*vc_font = NULL, *vc_font_map = NULL, *vc_font_unimap = NULL;
|
||||||
char *vc_font_map = NULL;
|
_cleanup_close_ int fd = -1;
|
||||||
char *vc_font_unimap = NULL;
|
|
||||||
int fd = -1;
|
|
||||||
bool utf8;
|
bool utf8;
|
||||||
pid_t font_pid = 0, keymap_pid = 0;
|
pid_t font_pid = 0, keymap_pid = 0;
|
||||||
bool font_copy = false;
|
bool font_copy = false;
|
||||||
@ -265,12 +263,12 @@ int main(int argc, char **argv) {
|
|||||||
fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
|
fd = open_terminal(vc, O_RDWR|O_CLOEXEC);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
log_error("Failed to open %s: %m", vc);
|
log_error("Failed to open %s: %m", vc);
|
||||||
goto finish;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_vconsole(fd)) {
|
if (!is_vconsole(fd)) {
|
||||||
log_error("Device %s is not a virtual console.", vc);
|
log_error("Device %s is not a virtual console.", vc);
|
||||||
goto finish;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
utf8 = is_locale_utf8();
|
utf8 = is_locale_utf8();
|
||||||
@ -305,27 +303,27 @@ int main(int argc, char **argv) {
|
|||||||
else
|
else
|
||||||
disable_utf8(fd);
|
disable_utf8(fd);
|
||||||
|
|
||||||
r = EXIT_FAILURE;
|
r = font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid);
|
||||||
if (keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid) >= 0 &&
|
if (r < 0) {
|
||||||
font_load(vc, vc_font, vc_font_map, vc_font_unimap, &font_pid) >= 0)
|
log_error("Failed to start " KBD_LOADKEYS ": %s", strerror(-r));
|
||||||
r = EXIT_SUCCESS;
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (font_pid > 0)
|
||||||
|
wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
|
||||||
|
|
||||||
|
r = keymap_load(vc, vc_keymap, vc_keymap_toggle, utf8, &keymap_pid);
|
||||||
|
if (r < 0) {
|
||||||
|
log_error("Failed to start " KBD_SETFONT ": %s", strerror(-r));
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
finish:
|
|
||||||
if (keymap_pid > 0)
|
if (keymap_pid > 0)
|
||||||
wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
|
wait_for_terminate_and_warn(KBD_LOADKEYS, keymap_pid);
|
||||||
|
|
||||||
if (font_pid > 0) {
|
/* Only copy the font when we started setfont successfully */
|
||||||
wait_for_terminate_and_warn(KBD_SETFONT, font_pid);
|
if (font_copy && font_pid > 0)
|
||||||
if (font_copy)
|
font_copy_to_all_vcs(fd);
|
||||||
font_copy_to_all_vcs(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(vc_keymap);
|
return EXIT_SUCCESS;
|
||||||
free(vc_font);
|
|
||||||
free(vc_font_map);
|
|
||||||
free(vc_font_unimap);
|
|
||||||
|
|
||||||
safe_close(fd);
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user