Compare commits
No commits in common. "c8" and "a10s" have entirely different histories.
26
.gitignore
vendored
26
.gitignore
vendored
@ -1 +1,25 @@
|
|||||||
SOURCES/plymouth-1e36e303e08ba425fecbcff4dde22c8ee936638c.tar.bz2
|
plymouth-0.8.4.tar.bz2
|
||||||
|
/plymouth-0.8.4.tar.bz2
|
||||||
|
/plymouth-0.8.5.tar.bz2
|
||||||
|
/plymouth-0.8.5.1.tar.bz2
|
||||||
|
/plymouth-0.8.6.tar.bz2
|
||||||
|
/plymouth-0.8.6.1.tar.bz2
|
||||||
|
/plymouth-0.8.6.2.tar.bz2
|
||||||
|
/plymouth-0.8.7.tar.bz2
|
||||||
|
/plymouth-0.8.8.tar.bz2
|
||||||
|
/plymouth-0.8.9.tar.bz2
|
||||||
|
/plymouth-0.9.3.tar.bz2
|
||||||
|
/plymouth-0.9.3.tar.xz
|
||||||
|
/plymouth-0.9.4.tar.xz
|
||||||
|
/plymouth-a8aad27.tar.gz
|
||||||
|
/plymouth-32c097c.tar.gz
|
||||||
|
/plymouth-58a7289.tar.gz
|
||||||
|
/plymouth-e31c81f.tar.gz
|
||||||
|
/plymouth-8a3c9bb.tar.gz
|
||||||
|
/plymouth-372b5f8.tar.gz
|
||||||
|
/plymouth-1ea1020.tar.gz
|
||||||
|
/plymouth-22.02.122.tar.bz2
|
||||||
|
/plymouth-23.356.9.tar.bz2
|
||||||
|
/plymouth-23.358.4.tar.bz2
|
||||||
|
/plymouth-23.360.11.tar.bz2
|
||||||
|
/plymouth-24.004.60.tar.bz2
|
||||||
|
@ -1 +0,0 @@
|
|||||||
7847967f397a536ccf5fb2d43aa561ac5e5dff6c SOURCES/plymouth-1e36e303e08ba425fecbcff4dde22c8ee936638c.tar.bz2
|
|
@ -0,0 +1,58 @@
|
|||||||
|
From e6f09b05707be8aec488d757c5abe56cb3060a75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adam Williamson <awilliam@redhat.com>
|
||||||
|
Date: Sat, 16 Mar 2024 17:22:57 -0700
|
||||||
|
Subject: [PATCH] Revert "src: Hide console text when splash is requested"
|
||||||
|
|
||||||
|
This reverts commit 48881ba2ef3d25fd27fd150d4d5957d4df9868e0.
|
||||||
|
It breaks display entirely on minimal installs.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-terminal.c | 2 --
|
||||||
|
src/main.c | 12 ++++--------
|
||||||
|
2 files changed, 4 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-terminal.c b/src/libply-splash-core/ply-terminal.c
|
||||||
|
index 1a9ec353..2036e507 100644
|
||||||
|
--- a/src/libply-splash-core/ply-terminal.c
|
||||||
|
+++ b/src/libply-splash-core/ply-terminal.c
|
||||||
|
@@ -357,8 +357,6 @@ ply_terminal_write (ply_terminal_t *terminal,
|
||||||
|
assert (terminal != NULL);
|
||||||
|
assert (format != NULL);
|
||||||
|
|
||||||
|
- ply_terminal_set_mode (terminal, PLY_TERMINAL_MODE_TEXT);
|
||||||
|
-
|
||||||
|
string = NULL;
|
||||||
|
va_start (args, format);
|
||||||
|
size = vasprintf (&string, format, args);
|
||||||
|
diff --git a/src/main.c b/src/main.c
|
||||||
|
index 33fe51e0..81e34c54 100644
|
||||||
|
--- a/src/main.c
|
||||||
|
+++ b/src/main.c
|
||||||
|
@@ -1000,14 +1000,6 @@ on_show_splash (state_t *state)
|
||||||
|
if (!state->is_attached && state->should_be_attached && has_displays)
|
||||||
|
attach_to_running_session (state);
|
||||||
|
|
||||||
|
- if (state->local_console_terminal != NULL)
|
||||||
|
- ply_terminal_set_mode (state->local_console_terminal, PLY_TERMINAL_MODE_GRAPHICS);
|
||||||
|
-
|
||||||
|
-#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
|
||||||
|
- if (state->is_attached)
|
||||||
|
- tell_systemd_to_print_details (state);
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
if (has_displays) {
|
||||||
|
ply_trace ("at least one display already available, so loading splash");
|
||||||
|
show_splash (state);
|
||||||
|
@@ -1438,6 +1430,10 @@ on_quit (state_t *state,
|
||||||
|
state->quit_trigger = quit_trigger;
|
||||||
|
state->should_retain_splash = retain_splash;
|
||||||
|
|
||||||
|
+#ifdef PLY_ENABLE_SYSTEMD_INTEGRATION
|
||||||
|
+ tell_systemd_to_stop_printing_details (state);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
ply_trace ("closing log");
|
||||||
|
if (state->session != NULL)
|
||||||
|
ply_terminal_session_close_log (state->session);
|
||||||
|
--
|
||||||
|
2.44.0
|
||||||
|
|
209
0001-details-dont-duplicate-output-on-console.patch
Normal file
209
0001-details-dont-duplicate-output-on-console.patch
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
From 2446472f9ac9246f2ee25a92e8ebb17c54b923bd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adrian Vovk <adrianvovk@gmail.com>
|
||||||
|
Date: Fri, 9 May 2025 14:44:24 -0400
|
||||||
|
Subject: [PATCH 1/3] utils: Don't lose log level when silencing kmsg
|
||||||
|
|
||||||
|
Once we disable kmsg logging to the console, the kernel will set the
|
||||||
|
console log level to the minimum log level (i.e. only logging kernel
|
||||||
|
panics). However the unintended side effect is that our own kmsg-reader
|
||||||
|
will start filtering out all kernel log messages, since we also respect
|
||||||
|
the kernel's console log level.
|
||||||
|
|
||||||
|
This change make it so that we keep using the original console log level
|
||||||
|
whenever we disable the kernel's output. This lets us keep forwarding
|
||||||
|
the kernel's kmsg output
|
||||||
|
---
|
||||||
|
src/libply/ply-utils.c | 79 +++++++++++++++++++++++++-----------------
|
||||||
|
1 file changed, 47 insertions(+), 32 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply/ply-utils.c b/src/libply/ply-utils.c
|
||||||
|
index 6fa64975..782fadd8 100644
|
||||||
|
--- a/src/libply/ply-utils.c
|
||||||
|
+++ b/src/libply/ply-utils.c
|
||||||
|
@@ -89,6 +89,10 @@ static int overridden_device_scale = 0;
|
||||||
|
static char kernel_command_line[PLY_MAX_COMMAND_LINE_SIZE];
|
||||||
|
static bool kernel_command_line_is_set;
|
||||||
|
|
||||||
|
+static int cached_current_log_level = 0;
|
||||||
|
+static int cached_default_log_level = 0;
|
||||||
|
+static double log_level_update_time = 0.0;
|
||||||
|
+
|
||||||
|
bool
|
||||||
|
ply_open_unidirectional_pipe (int *sender_fd,
|
||||||
|
int *receiver_fd)
|
||||||
|
@@ -673,20 +677,6 @@ ply_create_file_link (const char *source,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void
|
||||||
|
-ply_show_new_kernel_messages (bool should_show)
|
||||||
|
-{
|
||||||
|
- int type;
|
||||||
|
-
|
||||||
|
- if (should_show)
|
||||||
|
- type = PLY_ENABLE_CONSOLE_PRINTK;
|
||||||
|
- else
|
||||||
|
- type = PLY_DISABLE_CONSOLE_PRINTK;
|
||||||
|
-
|
||||||
|
- if (klogctl (type, NULL, 0) < 0)
|
||||||
|
- ply_trace ("could not toggle printk visibility: %m");
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
ply_daemon_handle_t *
|
||||||
|
ply_create_daemon (void)
|
||||||
|
{
|
||||||
|
@@ -1118,26 +1108,14 @@ int ply_guess_device_scale (uint32_t width,
|
||||||
|
return get_device_scale (width, height, 0, 0, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void
|
||||||
|
-ply_get_kmsg_log_levels (int *current_log_level,
|
||||||
|
- int *default_log_level)
|
||||||
|
+static void
|
||||||
|
+ply_get_kmsg_log_levels_uncached (int *current_log_level,
|
||||||
|
+ int *default_log_level)
|
||||||
|
{
|
||||||
|
- static double last_update_time = 0;
|
||||||
|
- static int cached_current_log_level = 0;
|
||||||
|
- static int cached_default_log_level = 0;
|
||||||
|
char log_levels[4096] = "";
|
||||||
|
- double current_time;
|
||||||
|
char *field, *fields;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
- current_time = ply_get_timestamp ();
|
||||||
|
-
|
||||||
|
- if ((current_time - last_update_time) < 1.0) {
|
||||||
|
- *current_log_level = cached_current_log_level;
|
||||||
|
- *default_log_level = cached_default_log_level;
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
ply_trace ("opening /proc/sys/kernel/printk");
|
||||||
|
fd = open ("/proc/sys/kernel/printk", O_RDONLY);
|
||||||
|
|
||||||
|
@@ -1171,11 +1149,48 @@ ply_get_kmsg_log_levels (int *current_log_level,
|
||||||
|
}
|
||||||
|
|
||||||
|
*default_log_level = atoi (field);
|
||||||
|
+}
|
||||||
|
|
||||||
|
- cached_current_log_level = *current_log_level;
|
||||||
|
- cached_default_log_level = *default_log_level;
|
||||||
|
+void
|
||||||
|
+ply_get_kmsg_log_levels (int *current_log_level,
|
||||||
|
+ int *default_log_level)
|
||||||
|
+{
|
||||||
|
+ double current_time;
|
||||||
|
+ bool no_cache;
|
||||||
|
+ bool cache_expired;
|
||||||
|
+
|
||||||
|
+ no_cache = cached_current_log_level == 0 || cached_default_log_level == 0;
|
||||||
|
+ current_time = ply_get_timestamp ();
|
||||||
|
+ cache_expired = log_level_update_time > 0.0 && (current_time - log_level_update_time) >= 1.0;
|
||||||
|
+
|
||||||
|
+ if (no_cache || cache_expired) {
|
||||||
|
+ ply_get_kmsg_log_levels_uncached (&cached_current_log_level, &cached_default_log_level);
|
||||||
|
+ log_level_update_time = current_time;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *current_log_level = cached_current_log_level;
|
||||||
|
+ *default_log_level = cached_default_log_level;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+ply_show_new_kernel_messages (bool should_show)
|
||||||
|
+{
|
||||||
|
+ int type;
|
||||||
|
+
|
||||||
|
+ if (should_show) {
|
||||||
|
+ type = PLY_ENABLE_CONSOLE_PRINTK;
|
||||||
|
+
|
||||||
|
+ cached_current_log_level = cached_default_log_level = 0;
|
||||||
|
+ log_level_update_time = 0.0;
|
||||||
|
+ } else {
|
||||||
|
+ type = PLY_DISABLE_CONSOLE_PRINTK;
|
||||||
|
+
|
||||||
|
+ ply_get_kmsg_log_levels_uncached (&cached_current_log_level, &cached_default_log_level);
|
||||||
|
+ log_level_update_time = -1.0; /* Disable expiration */
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- last_update_time = current_time;
|
||||||
|
+ if (klogctl (type, NULL, 0) < 0)
|
||||||
|
+ ply_trace ("could not toggle printk visibility: %m");
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
|
|
||||||
|
From 6d7b3c3342e80f94410165c72bb2d907624e3fff Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adrian Vovk <adrianvovk@gmail.com>
|
||||||
|
Date: Fri, 9 May 2025 15:17:48 -0400
|
||||||
|
Subject: [PATCH 2/3] details: Suppress kernel's own kmsg console output
|
||||||
|
|
||||||
|
Plymouth forwards /dev/console and /dev/kmsg to all consoles (and to the
|
||||||
|
graphical splash). With the details plugin, we would do this without
|
||||||
|
suppressing the kernel's own output first. This would lead to duplicate
|
||||||
|
log entries
|
||||||
|
---
|
||||||
|
src/plugins/splash/details/plugin.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/plugins/splash/details/plugin.c b/src/plugins/splash/details/plugin.c
|
||||||
|
index 9e150b5c..c7674fc0 100644
|
||||||
|
--- a/src/plugins/splash/details/plugin.c
|
||||||
|
+++ b/src/plugins/splash/details/plugin.c
|
||||||
|
@@ -308,6 +308,8 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
|
||||||
|
detach_from_event_loop,
|
||||||
|
plugin);
|
||||||
|
|
||||||
|
+ ply_show_new_kernel_messages (false);
|
||||||
|
+
|
||||||
|
if (boot_buffer) {
|
||||||
|
plugin->boot_buffer = boot_buffer;
|
||||||
|
|
||||||
|
@@ -350,6 +352,8 @@ hide_splash_screen (ply_boot_splash_plugin_t *plugin,
|
||||||
|
detach_from_event_loop,
|
||||||
|
plugin);
|
||||||
|
detach_from_event_loop (plugin);
|
||||||
|
+
|
||||||
|
+ ply_show_new_kernel_messages (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
GitLab
|
||||||
|
|
||||||
|
|
||||||
|
From a53065d0ce0b28a214b9088afc9d4d769c030d3b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adrian Vovk <adrianvovk@gmail.com>
|
||||||
|
Date: Fri, 9 May 2025 15:35:38 -0400
|
||||||
|
Subject: [PATCH 3/3] kmsg-reader: Seek to the end of the ringbuffer
|
||||||
|
|
||||||
|
Otherwise, whenever plymouth starts we'd replay all previous kmsg
|
||||||
|
entries, even if they've already been logged to the console. This leads
|
||||||
|
to duplicated log entires, and makes it hard to debug things.
|
||||||
|
|
||||||
|
With /dev/console, we only log what we capture while Plymouth is
|
||||||
|
running. Let's do the same with /dev/kmsg
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-kmsg-reader.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-kmsg-reader.c b/src/libply-splash-core/ply-kmsg-reader.c
|
||||||
|
index 439da415..9e9de214 100644
|
||||||
|
--- a/src/libply-splash-core/ply-kmsg-reader.c
|
||||||
|
+++ b/src/libply-splash-core/ply-kmsg-reader.c
|
||||||
|
@@ -204,6 +204,8 @@ ply_kmsg_reader_start (ply_kmsg_reader_t *kmsg_reader)
|
||||||
|
if (kmsg_reader->kmsg_fd < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ lseek (kmsg_reader->kmsg_fd, 0, SEEK_END);
|
||||||
|
+
|
||||||
|
kmsg_reader->fd_watch = ply_event_loop_watch_fd (ply_event_loop_get_default (), kmsg_reader->kmsg_fd, PLY_EVENT_LOOP_FD_STATUS_HAS_DATA,
|
||||||
|
(ply_event_handler_t) handle_kmsg_message,
|
||||||
|
NULL,
|
||||||
|
--
|
||||||
|
GitLab
|
@ -0,0 +1,37 @@
|
|||||||
|
From 10ac8d2dc927b112ce6aeb06bc73d9c46550954c Mon Sep 17 00:00:00 2001
|
||||||
|
From: n3rdopolis <bluescreen_avenger@verizon.net>
|
||||||
|
Date: Tue, 6 Feb 2024 18:52:25 -0500
|
||||||
|
Subject: [PATCH] ply-boot-splash: Set unbuffered input when creating a text
|
||||||
|
display
|
||||||
|
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-boot-splash.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-boot-splash.c b/src/libply-splash-core/ply-boot-splash.c
|
||||||
|
index 12fb6c10..217f455e 100644
|
||||||
|
--- a/src/libply-splash-core/ply-boot-splash.c
|
||||||
|
+++ b/src/libply-splash-core/ply-boot-splash.c
|
||||||
|
@@ -173,6 +173,7 @@ ply_boot_splash_add_text_display (ply_boot_splash_t *splash,
|
||||||
|
ply_text_display_t *display)
|
||||||
|
{
|
||||||
|
int number_of_columns, number_of_rows;
|
||||||
|
+ ply_terminal_t *terminal;
|
||||||
|
|
||||||
|
if (splash->plugin_interface->add_text_display == NULL)
|
||||||
|
return;
|
||||||
|
@@ -183,6 +184,11 @@ ply_boot_splash_add_text_display (ply_boot_splash_t *splash,
|
||||||
|
ply_trace ("adding %dx%d text display", number_of_columns, number_of_rows);
|
||||||
|
|
||||||
|
splash->plugin_interface->add_text_display (splash->plugin, display);
|
||||||
|
+
|
||||||
|
+ terminal = ply_text_display_get_terminal (display);
|
||||||
|
+ if (terminal)
|
||||||
|
+ ply_terminal_set_unbuffered_input (terminal);
|
||||||
|
+
|
||||||
|
ply_list_append_data (splash->text_displays, display);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.44.0
|
||||||
|
|
@ -0,0 +1,52 @@
|
|||||||
|
From 4a8c0a4231d35ac060f41b582596684cfba7c9ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Tue, 7 May 2024 12:42:10 +0200
|
||||||
|
Subject: [PATCH] ply-device-manager: Revert "Fall back to text plugin if no
|
||||||
|
renderers installed"
|
||||||
|
|
||||||
|
The drm renderer may fail to open /dev/dri/card# with -ENOENT when trying
|
||||||
|
to open/probe a simpledrm registered drm device and the open races with
|
||||||
|
that drm device being removed to be replaced by a new drm device registered
|
||||||
|
by the native GPU driver (e.g. i915 / amdgpu).
|
||||||
|
|
||||||
|
Switching to text mode immediately when this race gets hit is undesirable,
|
||||||
|
as it causes text mode on systems where plymouth would run in graphics
|
||||||
|
mode before. Remove the immediate switch to text mode on -ENOENT.
|
||||||
|
Delaying the switch to textmode until the timeout as before.
|
||||||
|
|
||||||
|
This reverts commit 03842d5201e4486fe62635c7b470eb94696f985d.
|
||||||
|
|
||||||
|
Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2270030
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 8 --------
|
||||||
|
1 file changed, 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 59e579dd..d75ac6c5 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -52,7 +52,6 @@
|
||||||
|
static void create_devices_from_udev (ply_device_manager_t *manager);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-static void create_non_graphical_devices (ply_device_manager_t *manager);
|
||||||
|
static bool create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||||
|
const char *device_path,
|
||||||
|
ply_terminal_t *terminal,
|
||||||
|
@@ -1102,13 +1101,6 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||||
|
renderer = ply_renderer_new (renderer_type, device_path, terminal);
|
||||||
|
|
||||||
|
if (renderer != NULL && !ply_renderer_open (renderer)) {
|
||||||
|
- if (errno == ENOENT) {
|
||||||
|
- ply_trace ("No renderer plugins installed, creating non-graphical devices");
|
||||||
|
- ply_renderer_free (renderer);
|
||||||
|
- create_non_graphical_devices (manager);
|
||||||
|
- manager->device_timeout_elapsed = true;
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
ply_trace ("could not open renderer for %s", device_path);
|
||||||
|
ply_renderer_free (renderer);
|
||||||
|
renderer = NULL;
|
||||||
|
--
|
||||||
|
2.44.0
|
||||||
|
|
108
0001-renderers-Do-not-assume-all-keyboards-have-LEDs.patch
Normal file
108
0001-renderers-Do-not-assume-all-keyboards-have-LEDs.patch
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
From 709f21e80199ee51badff2d9b5dc6bae8af2a1a1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: n3rdopolis <bluescreen_avenger@verizon.net>
|
||||||
|
Date: Wed, 31 Jan 2024 08:38:38 -0500
|
||||||
|
Subject: [PATCH] renderers: Do not assume all keyboards have LEDs
|
||||||
|
|
||||||
|
This is an attempt to fix #245
|
||||||
|
---
|
||||||
|
src/plugins/renderers/drm/plugin.c | 22 +++++++++++++++++++--
|
||||||
|
src/plugins/renderers/frame-buffer/plugin.c | 22 +++++++++++++++++++--
|
||||||
|
2 files changed, 40 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c
|
||||||
|
index 54cfe874..2fbb6b85 100644
|
||||||
|
--- a/src/plugins/renderers/drm/plugin.c
|
||||||
|
+++ b/src/plugins/renderers/drm/plugin.c
|
||||||
|
@@ -1972,6 +1972,17 @@ get_panel_properties (ply_renderer_backend_t *backend,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static ply_input_device_t *
|
||||||
|
+get_any_input_device (ply_renderer_backend_t *backend)
|
||||||
|
+{
|
||||||
|
+ ply_list_node_t *node = ply_list_get_first_node (backend->input_source.input_devices);
|
||||||
|
+
|
||||||
|
+ if (node != NULL)
|
||||||
|
+ return ply_list_node_get_data (node);
|
||||||
|
+
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static ply_input_device_t *
|
||||||
|
get_any_input_device_with_leds (ply_renderer_backend_t *backend)
|
||||||
|
{
|
||||||
|
@@ -1994,6 +2005,9 @@ get_capslock_state (ply_renderer_backend_t *backend)
|
||||||
|
{
|
||||||
|
if (using_input_device (&backend->input_source)) {
|
||||||
|
ply_input_device_t *dev = get_any_input_device_with_leds (backend);
|
||||||
|
+ if (!dev)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
return ply_input_device_get_capslock_state (dev);
|
||||||
|
}
|
||||||
|
if (!backend->terminal)
|
||||||
|
@@ -2006,8 +2020,12 @@ static const char *
|
||||||
|
get_keymap (ply_renderer_backend_t *backend)
|
||||||
|
{
|
||||||
|
if (using_input_device (&backend->input_source)) {
|
||||||
|
- ply_input_device_t *dev = get_any_input_device_with_leds (backend);
|
||||||
|
- const char *keymap = ply_input_device_get_keymap (dev);
|
||||||
|
+ const char *keymap;
|
||||||
|
+ ply_input_device_t *dev = get_any_input_device (backend);
|
||||||
|
+ if (!dev)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ keymap = ply_input_device_get_keymap (dev);
|
||||||
|
if (keymap != NULL) {
|
||||||
|
return keymap;
|
||||||
|
}
|
||||||
|
diff --git a/src/plugins/renderers/frame-buffer/plugin.c b/src/plugins/renderers/frame-buffer/plugin.c
|
||||||
|
index e57d0437..3d56116e 100644
|
||||||
|
--- a/src/plugins/renderers/frame-buffer/plugin.c
|
||||||
|
+++ b/src/plugins/renderers/frame-buffer/plugin.c
|
||||||
|
@@ -821,6 +821,17 @@ close_input_source (ply_renderer_backend_t *backend,
|
||||||
|
backend->input_source_is_open = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static ply_input_device_t *
|
||||||
|
+get_any_input_device (ply_renderer_backend_t *backend)
|
||||||
|
+{
|
||||||
|
+ ply_list_node_t *node = ply_list_get_first_node (backend->input_source.input_devices);
|
||||||
|
+
|
||||||
|
+ if (node != NULL)
|
||||||
|
+ return ply_list_node_get_data (node);
|
||||||
|
+
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static ply_input_device_t *
|
||||||
|
get_any_input_device_with_leds (ply_renderer_backend_t *backend)
|
||||||
|
{
|
||||||
|
@@ -843,6 +854,9 @@ get_capslock_state (ply_renderer_backend_t *backend)
|
||||||
|
{
|
||||||
|
if (using_input_device (&backend->input_source)) {
|
||||||
|
ply_input_device_t *dev = get_any_input_device_with_leds (backend);
|
||||||
|
+ if (!dev)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
return ply_input_device_get_capslock_state (dev);
|
||||||
|
}
|
||||||
|
if (!backend->terminal)
|
||||||
|
@@ -855,8 +869,12 @@ static const char *
|
||||||
|
get_keymap (ply_renderer_backend_t *backend)
|
||||||
|
{
|
||||||
|
if (using_input_device (&backend->input_source)) {
|
||||||
|
- ply_input_device_t *dev = get_any_input_device_with_leds (backend);
|
||||||
|
- const char *keymap = ply_input_device_get_keymap (dev);
|
||||||
|
+ const char *keymap;
|
||||||
|
+ ply_input_device_t *dev = get_any_input_device (backend);
|
||||||
|
+ if (!dev)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ keymap = ply_input_device_get_keymap (dev);
|
||||||
|
if (keymap != NULL) {
|
||||||
|
return keymap;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.46.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,871 +0,0 @@
|
|||||||
From f55051678452647e035853ee94a89cb54ea2aa4a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Fri, 17 Jul 2020 16:06:44 -0400
|
|
||||||
Subject: [PATCH] src: die during shutdown with everything else
|
|
||||||
|
|
||||||
plymouthd currently avoids getting killed at shutdown. This causes
|
|
||||||
filesystems to fail to remount read-only in some cases.
|
|
||||||
|
|
||||||
This commit changes things up so that plymouthd dies with everyone else,
|
|
||||||
but spawns a process to hold open the drm device that can keep the splash
|
|
||||||
up until the very end.
|
|
||||||
|
|
||||||
In order to keep this process alive until the very end, it gets run
|
|
||||||
from within the initramfs (if available). This requires adding service
|
|
||||||
files to jump back into the initramfs at shutdown
|
|
||||||
---
|
|
||||||
configure.ac | 1 +
|
|
||||||
scripts/plymouth-populate-initrd.in | 2 +
|
|
||||||
src/Makefile.am | 7 +++
|
|
||||||
src/main.c | 11 +++-
|
|
||||||
src/plugins/renderers/drm/Makefile.am | 3 +-
|
|
||||||
src/plugins/renderers/drm/plugin.c | 62 +++++++++++++++++++
|
|
||||||
src/plymouthd-drm-escrow.c | 18 ++++++
|
|
||||||
systemd-units/Makefile.am | 28 ++++++---
|
|
||||||
systemd-units/plymouth-halt.service.in | 1 +
|
|
||||||
systemd-units/plymouth-poweroff.service.in | 1 +
|
|
||||||
systemd-units/plymouth-reboot.service.in | 1 +
|
|
||||||
.../plymouth-switch-root-initramfs.service.in | 12 ++++
|
|
||||||
12 files changed, 134 insertions(+), 13 deletions(-)
|
|
||||||
create mode 100644 src/plymouthd-drm-escrow.c
|
|
||||||
create mode 100644 systemd-units/plymouth-switch-root-initramfs.service.in
|
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 970e19f..1dc8cdb 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -319,36 +319,37 @@ AC_CONFIG_FILES([Makefile po/Makefile.in
|
|
||||||
src/plugins/controls/label/Makefile
|
|
||||||
src/Makefile
|
|
||||||
src/client/ply-boot-client.pc
|
|
||||||
src/client/Makefile
|
|
||||||
src/upstart-bridge/Makefile
|
|
||||||
themes/Makefile
|
|
||||||
themes/spinfinity/Makefile
|
|
||||||
themes/fade-in/Makefile
|
|
||||||
themes/tribar/Makefile
|
|
||||||
themes/text/Makefile
|
|
||||||
themes/details/Makefile
|
|
||||||
themes/solar/Makefile
|
|
||||||
themes/glow/Makefile
|
|
||||||
themes/spinner/Makefile
|
|
||||||
themes/script/Makefile
|
|
||||||
themes/bgrt/Makefile
|
|
||||||
images/Makefile
|
|
||||||
scripts/plymouth-generate-initrd
|
|
||||||
scripts/plymouth-populate-initrd
|
|
||||||
scripts/plymouth-set-default-theme
|
|
||||||
scripts/Makefile
|
|
||||||
systemd-units/plymouth-halt.service
|
|
||||||
systemd-units/plymouth-kexec.service
|
|
||||||
systemd-units/plymouth-poweroff.service
|
|
||||||
systemd-units/plymouth-quit.service
|
|
||||||
systemd-units/plymouth-quit-wait.service
|
|
||||||
systemd-units/plymouth-read-write.service
|
|
||||||
systemd-units/plymouth-reboot.service
|
|
||||||
systemd-units/plymouth-start.service
|
|
||||||
systemd-units/plymouth-switch-root.service
|
|
||||||
+ systemd-units/plymouth-switch-root-initramfs.service
|
|
||||||
systemd-units/systemd-ask-password-plymouth.path
|
|
||||||
systemd-units/systemd-ask-password-plymouth.service
|
|
||||||
systemd-units/Makefile
|
|
||||||
docs/Makefile
|
|
||||||
])
|
|
||||||
AC_OUTPUT
|
|
||||||
diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in
|
|
||||||
index 60fd063..535a896 100755
|
|
||||||
--- a/scripts/plymouth-populate-initrd.in
|
|
||||||
+++ b/scripts/plymouth-populate-initrd.in
|
|
||||||
@@ -1,54 +1,55 @@
|
|
||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# inst bits ruthlessly and viciously stolen from dracut
|
|
||||||
|
|
||||||
[ -z "$DESTDIR" ] || exit 0
|
|
||||||
|
|
||||||
# For running on a (cross-compiled) sysroot, the following
|
|
||||||
# settings are needed:
|
|
||||||
# PLYMOUTH_SYSROOT - the sysroot directory
|
|
||||||
# PLYMOUTH_LDD - an optional ldd command that works on foreign binaries
|
|
||||||
# PLYMOUTH_LDD_PATH - optional PATH ldd is run with
|
|
||||||
|
|
||||||
[ -z "$PLYMOUTH_LDD" ] && PLYMOUTH_LDD="ldd"
|
|
||||||
[ -z "$PLYMOUTH_LDD_PATH" ] && PLYMOUTH_LDD_PATH="$PATH"
|
|
||||||
[ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@"
|
|
||||||
[ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@"
|
|
||||||
[ -z "$PLYMOUTH_PLUGIN_PATH" ] && PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)"
|
|
||||||
[ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@PLYMOUTH_LOGO_FILE@"
|
|
||||||
[ -n "$PLYMOUTH_THEME_NAME" ] && THEME_OVERRIDE=1
|
|
||||||
[ -z "$PLYMOUTH_THEME_NAME" ] && PLYMOUTH_THEME_NAME=$(plymouth-set-default-theme)
|
|
||||||
[ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@"
|
|
||||||
[ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@"
|
|
||||||
[ -z "$PLYMOUTH_DAEMON_PATH" ] && PLYMOUTH_DAEMON_PATH="@PLYMOUTH_DAEMON_DIR@/plymouthd"
|
|
||||||
[ -z "$PLYMOUTH_CLIENT_PATH" ] && PLYMOUTH_CLIENT_PATH="@PLYMOUTH_CLIENT_DIR@/plymouth"
|
|
||||||
+[ -z "$PLYMOUTH_DRM_ESCROW_PATH" ] && PLYMOUTH_DRM_ESCROW_PATH="@PLYMOUTH_LIBEXECDIR@/plymouth/plymouth-drm-escrow"
|
|
||||||
[ -z "$SYSTEMD_UNIT_DIR" ] && SYSTEMD_UNIT_DIR="@SYSTEMD_UNIT_DIR@"
|
|
||||||
[ -z "$SUPPORTED_LANGUAGES" ] && SUPPORTED_LANGUAGES="pt fr de it ru es en zh ja ko zh as bn gu hi kn ml mr or pa ta te"
|
|
||||||
|
|
||||||
# Generic substring function. If $2 is in $1, return 0.
|
|
||||||
strstr() { [ "${1#*$2*}" != "$1" ]; }
|
|
||||||
|
|
||||||
ddebug() {
|
|
||||||
[ "$verbose" = "true" ] && echo "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# normalize_path <path>
|
|
||||||
# Prints the normalized path, where it removes any duplicated
|
|
||||||
# and trailing slashes.
|
|
||||||
# Example:
|
|
||||||
# $ normalize_path ///test/test//
|
|
||||||
# /test/test
|
|
||||||
normalize_path() {
|
|
||||||
shopt -q -s extglob
|
|
||||||
set -- "${1//+(\/)//}"
|
|
||||||
shopt -q -u extglob
|
|
||||||
echo "${1%/}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# convert_abs_rel <from> <to>
|
|
||||||
# Prints the relative path, when creating a symlink to <to> from <from>.
|
|
||||||
# Example:
|
|
||||||
# $ convert_abs_rel /usr/bin/test /bin/test-2
|
|
||||||
# ../../bin/test-2
|
|
||||||
# $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test
|
|
||||||
convert_abs_rel() {
|
|
||||||
@@ -390,60 +391,61 @@ verbose=false
|
|
||||||
INITRDDIR=""
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case $1 in
|
|
||||||
--verbose|-v)
|
|
||||||
verbose=true
|
|
||||||
;;
|
|
||||||
--targetdir|-t)
|
|
||||||
shift
|
|
||||||
INITRDDIR="$1"
|
|
||||||
;;
|
|
||||||
--help|-h)
|
|
||||||
usage normal
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
usage error
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
[ -z "$INITRDDIR" ] && usage error
|
|
||||||
|
|
||||||
ddebug "Running with PLYMOUTH_SYSROOT=$PLYMOUTH_SYSROOT"
|
|
||||||
ddebug "Running with PLYMOUTH_LDD=$PLYMOUTH_LDD"
|
|
||||||
ddebug "Running with PLYMOUTH_LDD_PATH=$PLYMOUTH_LDD_PATH"
|
|
||||||
|
|
||||||
mkdir -p ${INITRDDIR}${PLYMOUTH_DATADIR}/plymouth/themes
|
|
||||||
inst ${PLYMOUTH_DAEMON_PATH} $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_CLIENT_PATH} $INITRDDIR
|
|
||||||
+inst ${PLYMOUTH_DRM_ESCROW_PATH} $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_DATADIR}/plymouth/themes/text/text.plymouth $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_PLUGIN_PATH}/text.so $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_DATADIR}/plymouth/themes/details/details.plymouth $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_PLUGIN_PATH}/details.so $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_LOGO_FILE} $INITRDDIR
|
|
||||||
inst @RELEASE_FILE@ $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_POLICYDIR}/plymouthd.defaults $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_CONFDIR}/plymouthd.conf $INITRDDIR
|
|
||||||
|
|
||||||
if [ -z "$PLYMOUTH_THEME_NAME" ]; then
|
|
||||||
echo "No default plymouth plugin is set" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $THEME_OVERRIDE ]; then
|
|
||||||
conf=$INITRDDIR/${PLYMOUTH_CONFDIR}/plymouthd.conf
|
|
||||||
echo "modifying plymouthd.conf: Theme=$PLYMOUTH_THEME_NAME" >&2
|
|
||||||
# make sure the section and key exist so we can modify them
|
|
||||||
grep -q "^ *\[Daemon\]" $conf || echo "[Daemon]" >> $conf
|
|
||||||
grep -q "^ *Theme *=" $conf || echo "Theme=fade-in" >> $conf
|
|
||||||
sed -i "s/^ *Theme *=.*/# theme modified by plymouth-populate-initrd\nTheme=$PLYMOUTH_THEME_NAME/" $conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
|
|
||||||
PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}"
|
|
||||||
PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//')
|
|
||||||
|
|
||||||
if [ ! -f ${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then
|
|
||||||
echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" >&2
|
|
||||||
exit 1
|
|
||||||
diff --git a/src/Makefile.am b/src/Makefile.am
|
|
||||||
index 95ed019..78f3f78 100644
|
|
||||||
--- a/src/Makefile.am
|
|
||||||
+++ b/src/Makefile.am
|
|
||||||
@@ -1,52 +1,59 @@
|
|
||||||
SUBDIRS = libply libply-splash-core libply-splash-graphics . plugins client
|
|
||||||
if ENABLE_UPSTART_MONITORING
|
|
||||||
SUBDIRS += upstart-bridge
|
|
||||||
endif
|
|
||||||
AM_CPPFLAGS = -I$(top_srcdir) \
|
|
||||||
-I$(srcdir)/libply \
|
|
||||||
-I$(srcdir)/libply-splash-core \
|
|
||||||
-I$(srcdir) \
|
|
||||||
+ -DPLYMOUTH_DRM_ESCROW_DIRECTORY=\"$(libexecdir)/plymouth\" \
|
|
||||||
-DPLYMOUTH_LOG_DIRECTORY=\"$(localstatedir)/log\" \
|
|
||||||
-DPLYMOUTH_SPOOL_DIRECTORY=\"$(localstatedir)/spool/plymouth\" \
|
|
||||||
-DPLYMOUTH_TIME_DIRECTORY=\"$(localstatedir)/lib/plymouth/\" \
|
|
||||||
-DPLYMOUTH_LOGO_FILE=\"$(logofile)\"
|
|
||||||
|
|
||||||
plymouthdbindir = $(plymouthdaemondir)
|
|
||||||
plymouthdbin_PROGRAMS = plymouthd
|
|
||||||
|
|
||||||
plymouthd_CFLAGS = $(PLYMOUTH_CFLAGS) \
|
|
||||||
-rdynamic \
|
|
||||||
-DPLYMOUTH_PLUGIN_PATH=\"$(PLYMOUTH_PLUGIN_PATH)\" \
|
|
||||||
-DPLYMOUTH_THEME_PATH=\"$(PLYMOUTH_THEME_PATH)/\" \
|
|
||||||
-DPLYMOUTH_POLICY_DIR=\"$(PLYMOUTH_POLICY_DIR)/\" \
|
|
||||||
-DPLYMOUTH_RUNTIME_DIR=\"$(PLYMOUTH_RUNTIME_DIR)\" \
|
|
||||||
-DPLYMOUTH_CONF_DIR=\"$(PLYMOUTH_CONF_DIR)/\" \
|
|
||||||
-DPLYMOUTH_RUNTIME_THEME_PATH=\"$(PLYMOUTH_RUNTIME_THEME_PATH)/\"
|
|
||||||
plymouthd_LDADD = $(PLYMOUTH_LIBS) libply/libply.la libply-splash-core/libply-splash-core.la
|
|
||||||
plymouthd_SOURCES = \
|
|
||||||
ply-boot-protocol.h \
|
|
||||||
ply-boot-server.h \
|
|
||||||
ply-boot-server.c \
|
|
||||||
plugins/splash/details/plugin.c \
|
|
||||||
main.c
|
|
||||||
|
|
||||||
+escrowdir = $(libexecdir)/plymouth
|
|
||||||
+escrow_PROGRAMS = plymouthd-drm-escrow
|
|
||||||
+
|
|
||||||
+plymouthd_drm_escrow_LDFLAGS = -all-static
|
|
||||||
+plymouthd_drm_escrow_SOURCES = plymouthd-drm-escrow.c
|
|
||||||
+
|
|
||||||
plymouthdrundir = $(localstatedir)/run/plymouth
|
|
||||||
plymouthdspooldir = $(localstatedir)/spool/plymouth
|
|
||||||
plymouthdtimedir = $(localstatedir)/lib/plymouth
|
|
||||||
|
|
||||||
pkgconfigdir = $(libdir)/pkgconfig
|
|
||||||
pkgconfig_DATA = ply-splash-core.pc ply-splash-graphics.pc
|
|
||||||
|
|
||||||
plymouthd_defaultsdir = $(PLYMOUTH_POLICY_DIR)
|
|
||||||
dist_plymouthd_defaults_DATA = plymouthd.defaults
|
|
||||||
|
|
||||||
plymouthd_confdir = $(PLYMOUTH_CONF_DIR)
|
|
||||||
dist_plymouthd_conf_DATA = plymouthd.conf
|
|
||||||
|
|
||||||
install-data-hook:
|
|
||||||
-mkdir -p $(DESTDIR)$(plymouthdrundir)
|
|
||||||
-mkdir -p $(DESTDIR)$(plymouthdspooldir)
|
|
||||||
-mkdir -p $(DESTDIR)$(plymouthdtimedir)
|
|
||||||
|
|
||||||
EXTRA_DIST = ply-splash-core.pc.in ply-splash-graphics.pc.in
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
diff --git a/src/main.c b/src/main.c
|
|
||||||
index 8848ad0..8372f2f 100644
|
|
||||||
--- a/src/main.c
|
|
||||||
+++ b/src/main.c
|
|
||||||
@@ -2181,65 +2181,70 @@ main (int argc,
|
|
||||||
|
|
||||||
if (daemon_handle == NULL) {
|
|
||||||
ply_error ("plymouthd: cannot daemonize: %m");
|
|
||||||
return EX_UNAVAILABLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
debug_buffer = ply_buffer_new ();
|
|
||||||
|
|
||||||
signal (SIGABRT, on_crash);
|
|
||||||
signal (SIGSEGV, on_crash);
|
|
||||||
|
|
||||||
/* before do anything we need to make sure we have a working
|
|
||||||
* environment.
|
|
||||||
*/
|
|
||||||
if (!initialize_environment (&state)) {
|
|
||||||
if (errno == 0) {
|
|
||||||
if (daemon_handle != NULL)
|
|
||||||
ply_detach_daemon (daemon_handle, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ply_error ("plymouthd: could not setup basic operating environment: %m");
|
|
||||||
if (daemon_handle != NULL)
|
|
||||||
ply_detach_daemon (daemon_handle, EX_OSERR);
|
|
||||||
return EX_OSERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make the first byte in argv be '@' so that we can survive systemd's killing
|
|
||||||
- * spree when going from initrd to /, and so we stay alive all the way until
|
|
||||||
- * the power is killed at shutdown.
|
|
||||||
+ * spree when going from initrd to /
|
|
||||||
* http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons
|
|
||||||
+ *
|
|
||||||
+ * If the system is shutting down, we let systemd slay us because otherwise we
|
|
||||||
+ * may prevent the root fs from getting remounted read-only.
|
|
||||||
*/
|
|
||||||
- argv[0][0] = '@';
|
|
||||||
+ if (state.mode != PLY_BOOT_SPLASH_MODE_SHUTDOWN &&
|
|
||||||
+ state.mode != PLY_BOOT_SPLASH_MODE_REBOOT) {
|
|
||||||
+ argv[0][0] = '@';
|
|
||||||
+ }
|
|
||||||
|
|
||||||
state.boot_server = start_boot_server (&state);
|
|
||||||
|
|
||||||
if (state.boot_server == NULL) {
|
|
||||||
ply_trace ("plymouthd is already running");
|
|
||||||
|
|
||||||
if (daemon_handle != NULL)
|
|
||||||
ply_detach_daemon (daemon_handle, EX_OK);
|
|
||||||
return EX_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
state.boot_buffer = ply_buffer_new ();
|
|
||||||
|
|
||||||
if (attach_to_session) {
|
|
||||||
state.should_be_attached = attach_to_session;
|
|
||||||
if (!attach_to_running_session (&state)) {
|
|
||||||
ply_trace ("could not redirect console session: %m");
|
|
||||||
if (!no_daemon)
|
|
||||||
ply_detach_daemon (daemon_handle, EX_UNAVAILABLE);
|
|
||||||
return EX_UNAVAILABLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
state.progress = ply_progress_new ();
|
|
||||||
state.splash_delay = NAN;
|
|
||||||
state.device_timeout = NAN;
|
|
||||||
|
|
||||||
ply_progress_load_cache (state.progress,
|
|
||||||
get_cache_file_for_mode (state.mode));
|
|
||||||
|
|
||||||
diff --git a/src/plugins/renderers/drm/Makefile.am b/src/plugins/renderers/drm/Makefile.am
|
|
||||||
index 271b17f..22a819b 100644
|
|
||||||
--- a/src/plugins/renderers/drm/Makefile.am
|
|
||||||
+++ b/src/plugins/renderers/drm/Makefile.am
|
|
||||||
@@ -1,23 +1,24 @@
|
|
||||||
if ENABLE_DRM_RENDERER
|
|
||||||
AM_CPPFLAGS = -I$(top_srcdir) \
|
|
||||||
-I$(srcdir)/../../../libply \
|
|
||||||
-I$(srcdir)/../../../libply-splash-core \
|
|
||||||
-I$(srcdir)/../../.. \
|
|
||||||
-I$(srcdir)/../.. \
|
|
||||||
-I$(srcdir)/.. \
|
|
||||||
- -I$(srcdir)
|
|
||||||
+ -I$(srcdir) \
|
|
||||||
+ -DPLYMOUTH_DRM_ESCROW_DIRECTORY=\"$(libexecdir)/plymouth\"
|
|
||||||
|
|
||||||
plugindir = $(libdir)/plymouth/renderers
|
|
||||||
plugin_LTLIBRARIES = drm.la
|
|
||||||
|
|
||||||
drm_la_CFLAGS = $(PLYMOUTH_CFLAGS) $(DRM_CFLAGS)
|
|
||||||
|
|
||||||
drm_la_LDFLAGS = -module -avoid-version -export-dynamic
|
|
||||||
drm_la_LIBADD = $(PLYMOUTH_LIBS) $(DRM_LIBS) \
|
|
||||||
../../../libply/libply.la \
|
|
||||||
../../../libply-splash-core/libply-splash-core.la
|
|
||||||
drm_la_SOURCES = $(srcdir)/plugin.c
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in
|
|
||||||
diff --git a/src/plugins/renderers/drm/plugin.c b/src/plugins/renderers/drm/plugin.c
|
|
||||||
index 4dbf8da..38bae36 100644
|
|
||||||
--- a/src/plugins/renderers/drm/plugin.c
|
|
||||||
+++ b/src/plugins/renderers/drm/plugin.c
|
|
||||||
@@ -131,73 +131,79 @@ typedef struct
|
|
||||||
bool connected;
|
|
||||||
bool uses_hw_rotation;
|
|
||||||
} ply_output_t;
|
|
||||||
|
|
||||||
struct _ply_renderer_backend
|
|
||||||
{
|
|
||||||
ply_event_loop_t *loop;
|
|
||||||
ply_terminal_t *terminal;
|
|
||||||
|
|
||||||
int device_fd;
|
|
||||||
char *device_name;
|
|
||||||
drmModeRes *resources;
|
|
||||||
|
|
||||||
ply_renderer_input_source_t input_source;
|
|
||||||
ply_list_t *heads;
|
|
||||||
ply_hashtable_t *heads_by_controller_id;
|
|
||||||
|
|
||||||
ply_hashtable_t *output_buffers;
|
|
||||||
|
|
||||||
ply_output_t *outputs;
|
|
||||||
int outputs_len;
|
|
||||||
int connected_count;
|
|
||||||
|
|
||||||
int32_t dither_red;
|
|
||||||
int32_t dither_green;
|
|
||||||
int32_t dither_blue;
|
|
||||||
|
|
||||||
uint32_t is_active : 1;
|
|
||||||
uint32_t requires_explicit_flushing : 1;
|
|
||||||
uint32_t use_preferred_mode : 1;
|
|
||||||
+ uint32_t watching_for_termination : 1;
|
|
||||||
|
|
||||||
int panel_width;
|
|
||||||
int panel_height;
|
|
||||||
ply_pixel_buffer_rotation_t panel_rotation;
|
|
||||||
int panel_scale;
|
|
||||||
};
|
|
||||||
|
|
||||||
ply_renderer_plugin_interface_t *ply_renderer_backend_get_interface (void);
|
|
||||||
static bool open_input_source (ply_renderer_backend_t *backend,
|
|
||||||
ply_renderer_input_source_t *input_source);
|
|
||||||
static void flush_head (ply_renderer_backend_t *backend,
|
|
||||||
ply_renderer_head_t *head);
|
|
||||||
|
|
||||||
+static void close_device (ply_renderer_backend_t *backend);
|
|
||||||
+
|
|
||||||
+static void watch_for_termination (ply_renderer_backend_t *backend);
|
|
||||||
+static void stop_watching_for_termination (ply_renderer_backend_t *backend);
|
|
||||||
+
|
|
||||||
/* A small helper to determine if we should try to keep the current mode
|
|
||||||
* or pick the best mode ourselves, we keep the current mode only if the
|
|
||||||
* user specified a specific mode using video= on the commandline.
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
should_use_preferred_mode (void)
|
|
||||||
{
|
|
||||||
bool use_preferred_mode = true;
|
|
||||||
|
|
||||||
if (ply_kernel_command_line_get_string_after_prefix ("video="))
|
|
||||||
use_preferred_mode = false;
|
|
||||||
|
|
||||||
ply_trace ("should_use_preferred_mode: %d", use_preferred_mode);
|
|
||||||
|
|
||||||
return use_preferred_mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
ply_renderer_buffer_map (ply_renderer_backend_t *backend,
|
|
||||||
ply_renderer_buffer_t *buffer)
|
|
||||||
{
|
|
||||||
struct drm_mode_map_dumb map_dumb_buffer_request;
|
|
||||||
void *map_address;
|
|
||||||
|
|
||||||
if (buffer->map_address != MAP_FAILED) {
|
|
||||||
buffer->map_count++;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset (&map_dumb_buffer_request, 0, sizeof(struct drm_mode_map_dumb));
|
|
||||||
@@ -918,158 +924,214 @@ static void
|
|
||||||
destroy_backend (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
ply_trace ("destroying renderer backend for device %s", backend->device_name);
|
|
||||||
free_heads (backend);
|
|
||||||
|
|
||||||
free (backend->device_name);
|
|
||||||
ply_hashtable_free (backend->output_buffers);
|
|
||||||
ply_hashtable_free (backend->heads_by_controller_id);
|
|
||||||
|
|
||||||
free (backend->outputs);
|
|
||||||
free (backend);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
ply_renderer_head_t *head;
|
|
||||||
ply_list_node_t *node;
|
|
||||||
|
|
||||||
ply_trace ("taking master and scanning out");
|
|
||||||
backend->is_active = true;
|
|
||||||
|
|
||||||
drmSetMaster (backend->device_fd);
|
|
||||||
node = ply_list_get_first_node (backend->heads);
|
|
||||||
while (node != NULL) {
|
|
||||||
head = (ply_renderer_head_t *) ply_list_node_get_data (node);
|
|
||||||
/* Flush out any pending drawing to the buffer */
|
|
||||||
flush_head (backend, head);
|
|
||||||
node = ply_list_get_next_node (backend->heads, node);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ watch_for_termination (backend);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
deactivate (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
ply_trace ("dropping master");
|
|
||||||
drmDropMaster (backend->device_fd);
|
|
||||||
backend->is_active = false;
|
|
||||||
+
|
|
||||||
+ stop_watching_for_termination (backend);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_active_vt_changed (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
if (ply_terminal_is_active (backend->terminal)) {
|
|
||||||
ply_trace ("activating on vt change");
|
|
||||||
activate (backend);
|
|
||||||
} else {
|
|
||||||
ply_trace ("deactivating on vt change");
|
|
||||||
deactivate (backend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
load_driver (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
int device_fd;
|
|
||||||
|
|
||||||
ply_trace ("Opening '%s'", backend->device_name);
|
|
||||||
device_fd = open (backend->device_name, O_RDWR);
|
|
||||||
|
|
||||||
if (device_fd < 0) {
|
|
||||||
ply_trace ("open failed: %m");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
backend->device_fd = device_fd;
|
|
||||||
|
|
||||||
drmDropMaster (device_fd);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
unload_backend (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
if (backend == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ply_trace ("unloading backend");
|
|
||||||
|
|
||||||
if (backend->device_fd >= 0) {
|
|
||||||
drmClose (backend->device_fd);
|
|
||||||
backend->device_fd = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy_backend (backend);
|
|
||||||
backend = NULL;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+on_term_signal (ply_renderer_backend_t *backend)
|
|
||||||
+{
|
|
||||||
+ pid_t pid;
|
|
||||||
+
|
|
||||||
+ ply_trace ("got SIGTERM, launching drm escrow to protect splash, and dying");
|
|
||||||
+
|
|
||||||
+ pid = fork();
|
|
||||||
+
|
|
||||||
+ if (pid == 0) {
|
|
||||||
+ const char *argv[] = { PLYMOUTH_DRM_ESCROW_DIRECTORY "/plymouthd-drm-escrow", NULL };
|
|
||||||
+
|
|
||||||
+ dup (backend->device_fd);
|
|
||||||
+ execve (argv[0], (char * const *) argv, NULL);
|
|
||||||
+
|
|
||||||
+ ply_trace ("could not launch drm escrow process: %m");
|
|
||||||
+
|
|
||||||
+ _exit (1);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ close_device (backend);
|
|
||||||
+
|
|
||||||
+ exit (0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+watch_for_termination (ply_renderer_backend_t *backend)
|
|
||||||
+{
|
|
||||||
+ if (backend->watching_for_termination)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ ply_trace ("watching for termination signal");
|
|
||||||
+ ply_event_loop_watch_signal (backend->loop, SIGTERM, (ply_event_handler_t) on_term_signal, backend);
|
|
||||||
+ backend->watching_for_termination = true;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+stop_watching_for_termination (ply_renderer_backend_t *backend)
|
|
||||||
+{
|
|
||||||
+ if (!backend->watching_for_termination)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ ply_trace ("stopping watching for termination signal");
|
|
||||||
+ ply_event_loop_stop_watching_signal (backend->loop, SIGTERM);
|
|
||||||
+ backend->watching_for_termination = false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static bool
|
|
||||||
open_device (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
assert (backend != NULL);
|
|
||||||
assert (backend->device_name != NULL);
|
|
||||||
|
|
||||||
if (!load_driver (backend))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (backend->terminal == NULL)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (!ply_terminal_open (backend->terminal)) {
|
|
||||||
ply_trace ("could not open terminal: %m");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ply_terminal_is_vt (backend->terminal)) {
|
|
||||||
ply_trace ("terminal is not a VT");
|
|
||||||
ply_terminal_close (backend->terminal);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ply_terminal_watch_for_active_vt_change (backend->terminal,
|
|
||||||
(ply_terminal_active_vt_changed_handler_t)
|
|
||||||
on_active_vt_changed,
|
|
||||||
backend);
|
|
||||||
|
|
||||||
+ watch_for_termination (backend);
|
|
||||||
+
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
close_device (ply_renderer_backend_t *backend)
|
|
||||||
{
|
|
||||||
ply_trace ("closing device");
|
|
||||||
|
|
||||||
free_heads (backend);
|
|
||||||
|
|
||||||
+ stop_watching_for_termination (backend);
|
|
||||||
+
|
|
||||||
if (backend->terminal != NULL) {
|
|
||||||
ply_terminal_stop_watching_for_active_vt_change (backend->terminal,
|
|
||||||
(ply_terminal_active_vt_changed_handler_t)
|
|
||||||
on_active_vt_changed,
|
|
||||||
backend);
|
|
||||||
}
|
|
||||||
|
|
||||||
unload_backend (backend);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
output_get_controller_info (ply_renderer_backend_t *backend,
|
|
||||||
drmModeConnector *connector,
|
|
||||||
ply_output_t *output)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
drmModeEncoder *encoder;
|
|
||||||
|
|
||||||
assert (backend != NULL);
|
|
||||||
|
|
||||||
output->possible_controllers = 0xffffffff;
|
|
||||||
|
|
||||||
for (i = 0; i < connector->count_encoders; i++) {
|
|
||||||
encoder = drmModeGetEncoder (backend->device_fd,
|
|
||||||
connector->encoders[i]);
|
|
||||||
|
|
||||||
if (encoder == NULL)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (encoder->encoder_id == connector->encoder_id && encoder->crtc_id) {
|
|
||||||
diff --git a/src/plymouthd-drm-escrow.c b/src/plymouthd-drm-escrow.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..9097db9
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/plymouthd-drm-escrow.c
|
|
||||||
@@ -0,0 +1,18 @@
|
|
||||||
+#include <signal.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main(int argc, char **argv)
|
|
||||||
+{
|
|
||||||
+ signal (SIGTERM, SIG_IGN);
|
|
||||||
+
|
|
||||||
+ /* Make the first byte in argv be '@' so that we can survive systemd's killing
|
|
||||||
+ * spree until the power is killed at shutdown.
|
|
||||||
+ * http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons
|
|
||||||
+ */
|
|
||||||
+ argv[0][0] = '@';
|
|
||||||
+
|
|
||||||
+ while (pause());
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
diff --git a/systemd-units/Makefile.am b/systemd-units/Makefile.am
|
|
||||||
index b1d843b..bfede17 100644
|
|
||||||
--- a/systemd-units/Makefile.am
|
|
||||||
+++ b/systemd-units/Makefile.am
|
|
||||||
@@ -1,78 +1,88 @@
|
|
||||||
systemd_unit_templates = \
|
|
||||||
plymouth-switch-root.service.in \
|
|
||||||
+ plymouth-switch-root-initramfs.service.in \
|
|
||||||
plymouth-start.service.in \
|
|
||||||
plymouth-read-write.service.in \
|
|
||||||
plymouth-quit.service.in \
|
|
||||||
plymouth-quit-wait.service.in \
|
|
||||||
plymouth-reboot.service.in \
|
|
||||||
plymouth-kexec.service.in \
|
|
||||||
plymouth-poweroff.service.in \
|
|
||||||
plymouth-halt.service.in \
|
|
||||||
systemd-ask-password-plymouth.path.in \
|
|
||||||
systemd-ask-password-plymouth.service.in
|
|
||||||
|
|
||||||
if ENABLE_SYSTEMD_INTEGRATION
|
|
||||||
systemdunitdir=$(SYSTEMD_UNIT_DIR)
|
|
||||||
systemdunit_DATA = $(systemd_unit_templates:.in=)
|
|
||||||
|
|
||||||
install-data-hook:
|
|
||||||
$(MKDIR_P) -m 0755 \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/initrd-switch-root.target.wants\
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/initrd-switch-root.target.wants && \
|
|
||||||
rm -f plymouth-start.service plymouth-switch-root.service && \
|
|
||||||
$(LN_S) ../plymouth-start.service && \
|
|
||||||
$(LN_S) ../plymouth-switch-root.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants && \
|
|
||||||
rm -f plymouth-start.service plymouth-read-write.service && \
|
|
||||||
$(LN_S) ../plymouth-start.service && \
|
|
||||||
$(LN_S) ../plymouth-read-write.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants && \
|
|
||||||
rm -f plymouth-quit.service plymouth-quit-wait.service && \
|
|
||||||
$(LN_S) ../plymouth-quit.service && \
|
|
||||||
$(LN_S) ../plymouth-quit-wait.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants && \
|
|
||||||
- rm -f plymouth-reboot.service && \
|
|
||||||
- $(LN_S) ../plymouth-reboot.service)
|
|
||||||
+ rm -f plymouth-reboot.service \
|
|
||||||
+ plymouth-switch-root-initramfs.service && \
|
|
||||||
+ $(LN_S) ../plymouth-reboot.service && \
|
|
||||||
+ $(LN_S) ../plymouth-switch-root-initramfs.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants && \
|
|
||||||
rm -f plymouth-kexec.service && \
|
|
||||||
$(LN_S) ../plymouth-kexec.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants && \
|
|
||||||
- rm -f plymouth-poweroff.service && \
|
|
||||||
- $(LN_S) ../plymouth-poweroff.service)
|
|
||||||
+ rm -f plymouth-poweroff.service \
|
|
||||||
+ plymouth-switch-root-initramfs.service && \
|
|
||||||
+ $(LN_S) ../plymouth-poweroff.service && \
|
|
||||||
+ $(LN_S) ../plymouth-switch-root-initramfs.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants && \
|
|
||||||
- rm -f plymouth-halt.service && \
|
|
||||||
- $(LN_S) ../plymouth-halt.service)
|
|
||||||
+ rm -f plymouth-halt.service \
|
|
||||||
+ plymouth-switch-root-initramfs.service && \
|
|
||||||
+ $(LN_S) ../plymouth-halt.service && \
|
|
||||||
+ $(LN_S) ../plymouth-switch-root-initramfs.service)
|
|
||||||
|
|
||||||
uninstall-hook:
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/initrd-switch-root.target.wants && \
|
|
||||||
rm -f plymouth-start.service plymouth-switch-root.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants && \
|
|
||||||
rm -f plymouth-start.service plymouth-read-write.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants && \
|
|
||||||
rm -f plymouth-quit.service plymouth-quit-wait.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants && \
|
|
||||||
- rm -f plymouth-reboot.service)
|
|
||||||
+ rm -f plymouth-reboot.service \
|
|
||||||
+ plymouth-switch-root-initramfs.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants && \
|
|
||||||
rm -f plymouth-kexec.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants && \
|
|
||||||
- rm -f plymouth-poweroff.service)
|
|
||||||
+ rm -f plymouth-poweroff.service \
|
|
||||||
+ plymouth-switch-root-initramfs.service)
|
|
||||||
(cd $(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants && \
|
|
||||||
- rm -f plymouth-halt.service)
|
|
||||||
+ rm -f plymouth-halt.service \
|
|
||||||
+ plymouth-switch-root-initramfs.service)
|
|
||||||
rmdir --ignore-fail-on-non-empty \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/sysinit.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/multi-user.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/reboot.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/kexec.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/poweroff.target.wants \
|
|
||||||
$(DESTDIR)$(SYSTEMD_UNIT_DIR)/halt.target.wants
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
EXTRA_DIST = $(systemd_unit_templates) $(systemdunit_DATA)
|
|
||||||
DISTCLEANFILES=$(systemdunit_DATA)
|
|
||||||
diff --git a/systemd-units/plymouth-halt.service.in b/systemd-units/plymouth-halt.service.in
|
|
||||||
index cb87c1f..00f7eed 100644
|
|
||||||
--- a/systemd-units/plymouth-halt.service.in
|
|
||||||
+++ b/systemd-units/plymouth-halt.service.in
|
|
||||||
@@ -1,13 +1,14 @@
|
|
||||||
[Unit]
|
|
||||||
Description=Show Plymouth Halt Screen
|
|
||||||
After=getty@tty1.service display-manager.service plymouth-start.service
|
|
||||||
Before=systemd-halt.service
|
|
||||||
DefaultDependencies=no
|
|
||||||
ConditionKernelCommandLine=!plymouth.enable=0
|
|
||||||
ConditionVirtualization=!container
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=shutdown --attach-to-session
|
|
||||||
ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash
|
|
||||||
+KillMode=none
|
|
||||||
Type=forking
|
|
||||||
RemainAfterExit=yes
|
|
||||||
diff --git a/systemd-units/plymouth-poweroff.service.in b/systemd-units/plymouth-poweroff.service.in
|
|
||||||
index cf05e47..a1f78eb 100644
|
|
||||||
--- a/systemd-units/plymouth-poweroff.service.in
|
|
||||||
+++ b/systemd-units/plymouth-poweroff.service.in
|
|
||||||
@@ -1,13 +1,14 @@
|
|
||||||
[Unit]
|
|
||||||
Description=Show Plymouth Power Off Screen
|
|
||||||
After=getty@tty1.service display-manager.service plymouth-start.service
|
|
||||||
Before=systemd-poweroff.service
|
|
||||||
DefaultDependencies=no
|
|
||||||
ConditionKernelCommandLine=!plymouth.enable=0
|
|
||||||
ConditionVirtualization=!container
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=shutdown --attach-to-session
|
|
||||||
ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash
|
|
||||||
+KillMode=none
|
|
||||||
Type=forking
|
|
||||||
RemainAfterExit=yes
|
|
||||||
diff --git a/systemd-units/plymouth-reboot.service.in b/systemd-units/plymouth-reboot.service.in
|
|
||||||
index 3624550..8fff576 100644
|
|
||||||
--- a/systemd-units/plymouth-reboot.service.in
|
|
||||||
+++ b/systemd-units/plymouth-reboot.service.in
|
|
||||||
@@ -1,13 +1,14 @@
|
|
||||||
[Unit]
|
|
||||||
Description=Show Plymouth Reboot Screen
|
|
||||||
After=getty@tty1.service display-manager.service plymouth-start.service
|
|
||||||
Before=systemd-reboot.service
|
|
||||||
DefaultDependencies=no
|
|
||||||
ConditionKernelCommandLine=!plymouth.enable=0
|
|
||||||
ConditionVirtualization=!container
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=@PLYMOUTH_DAEMON_DIR@/plymouthd --mode=reboot --attach-to-session
|
|
||||||
ExecStartPost=-@PLYMOUTH_CLIENT_DIR@/plymouth show-splash
|
|
||||||
+KillMode=none
|
|
||||||
Type=forking
|
|
||||||
RemainAfterExit=yes
|
|
||||||
diff --git a/systemd-units/plymouth-switch-root-initramfs.service.in b/systemd-units/plymouth-switch-root-initramfs.service.in
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..cb20459
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/systemd-units/plymouth-switch-root-initramfs.service.in
|
|
||||||
@@ -0,0 +1,12 @@
|
|
||||||
+[Unit]
|
|
||||||
+Description=Tell Plymouth To Jump To initramfs
|
|
||||||
+DefaultDependencies=no
|
|
||||||
+After=plymouth-halt.service plymouth-reboot.service plymouth-poweroff.service dracut-shutdown.service
|
|
||||||
+ConditionPathExists=/run/initramfs/bin/sh
|
|
||||||
+
|
|
||||||
+[Service]
|
|
||||||
+Type=oneshot
|
|
||||||
+RemainAfterExit=yes
|
|
||||||
+ExecStart=-@PLYMOUTH_CLIENT_DIR@/plymouth update-root-fs --new-root-dir=/run/initramfs
|
|
||||||
+Type=oneshot
|
|
||||||
+RemainAfterExit=yes
|
|
||||||
--
|
|
||||||
2.26.0
|
|
||||||
|
|
@ -1,142 +0,0 @@
|
|||||||
From b9faf90fe5939fedfd710e1e8385f4d5c12e1df7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Mon, 15 Jun 2020 10:35:45 -0400
|
|
||||||
Subject: [PATCH 2/2] throbgress: update for api change
|
|
||||||
|
|
||||||
---
|
|
||||||
src/plugins/splash/throbgress/plugin.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c
|
|
||||||
index 86be064..68cca70 100644
|
|
||||||
--- a/src/plugins/splash/throbgress/plugin.c
|
|
||||||
+++ b/src/plugins/splash/throbgress/plugin.c
|
|
||||||
@@ -715,61 +715,61 @@ update_status (ply_boot_splash_plugin_t *plugin,
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_boot_progress (ply_boot_splash_plugin_t *plugin,
|
|
||||||
double duration,
|
|
||||||
double percent_done)
|
|
||||||
{
|
|
||||||
ply_list_node_t *node;
|
|
||||||
double total_duration;
|
|
||||||
|
|
||||||
if (plugin->mode == PLY_BOOT_SPLASH_MODE_UPDATES ||
|
|
||||||
plugin->mode == PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE ||
|
|
||||||
plugin->mode == PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
total_duration = duration / percent_done;
|
|
||||||
|
|
||||||
/* Fun made-up smoothing function to make the growth asymptotic:
|
|
||||||
* fraction(time,estimate)=1-2^(-(time^1.45)/estimate) */
|
|
||||||
percent_done = 1.0 - pow (2.0, -pow (duration, 1.45) / total_duration) * (1.0 - percent_done);
|
|
||||||
|
|
||||||
node = ply_list_get_first_node (plugin->views);
|
|
||||||
|
|
||||||
while (node != NULL) {
|
|
||||||
ply_list_node_t *next_node;
|
|
||||||
view_t *view;
|
|
||||||
|
|
||||||
view = ply_list_node_get_data (node);
|
|
||||||
next_node = ply_list_get_next_node (plugin->views, node);
|
|
||||||
|
|
||||||
- ply_progress_bar_set_percent_done (view->progress_bar, percent_done);
|
|
||||||
+ ply_progress_bar_set_fraction_done (view->progress_bar, percent_done);
|
|
||||||
|
|
||||||
node = next_node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
hide_splash_screen (ply_boot_splash_plugin_t *plugin,
|
|
||||||
ply_event_loop_t *loop)
|
|
||||||
{
|
|
||||||
assert (plugin != NULL);
|
|
||||||
|
|
||||||
ply_trace ("hiding splash");
|
|
||||||
if (plugin->loop != NULL) {
|
|
||||||
stop_animation (plugin, NULL);
|
|
||||||
|
|
||||||
ply_event_loop_stop_watching_for_exit (plugin->loop, (ply_event_loop_exit_handler_t)
|
|
||||||
detach_from_event_loop,
|
|
||||||
plugin);
|
|
||||||
detach_from_event_loop (plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin->is_visible = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
show_password_prompt (ply_boot_splash_plugin_t *plugin,
|
|
||||||
const char *text,
|
|
||||||
int number_of_bullets)
|
|
||||||
{
|
|
||||||
ply_list_node_t *node;
|
|
||||||
@@ -920,61 +920,61 @@ display_question (ply_boot_splash_plugin_t *plugin,
|
|
||||||
show_prompt (plugin, prompt, entry_text);
|
|
||||||
redraw_views (plugin);
|
|
||||||
unpause_views (plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
display_message (ply_boot_splash_plugin_t *plugin,
|
|
||||||
const char *message)
|
|
||||||
{
|
|
||||||
show_message (plugin, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
system_update (ply_boot_splash_plugin_t *plugin,
|
|
||||||
int progress)
|
|
||||||
{
|
|
||||||
ply_list_node_t *node;
|
|
||||||
|
|
||||||
if (plugin->mode != PLY_BOOT_SPLASH_MODE_UPDATES &&
|
|
||||||
plugin->mode != PLY_BOOT_SPLASH_MODE_SYSTEM_UPGRADE &&
|
|
||||||
plugin->mode != PLY_BOOT_SPLASH_MODE_FIRMWARE_UPGRADE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
node = ply_list_get_first_node (plugin->views);
|
|
||||||
while (node != NULL) {
|
|
||||||
ply_list_node_t *next_node;
|
|
||||||
view_t *view;
|
|
||||||
|
|
||||||
view = ply_list_node_get_data (node);
|
|
||||||
next_node = ply_list_get_next_node (plugin->views, node);
|
|
||||||
- ply_progress_bar_set_percent_done (view->progress_bar, (double) progress / 100.f);
|
|
||||||
+ ply_progress_bar_set_fraction_done (view->progress_bar, (double) progress / 100.f);
|
|
||||||
node = next_node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ply_boot_splash_plugin_interface_t *
|
|
||||||
ply_boot_splash_plugin_get_interface (void)
|
|
||||||
{
|
|
||||||
static ply_boot_splash_plugin_interface_t plugin_interface =
|
|
||||||
{
|
|
||||||
.create_plugin = create_plugin,
|
|
||||||
.destroy_plugin = destroy_plugin,
|
|
||||||
.add_pixel_display = add_pixel_display,
|
|
||||||
.remove_pixel_display = remove_pixel_display,
|
|
||||||
.show_splash_screen = show_splash_screen,
|
|
||||||
.update_status = update_status,
|
|
||||||
.on_boot_progress = on_boot_progress,
|
|
||||||
.hide_splash_screen = hide_splash_screen,
|
|
||||||
.on_root_mounted = on_root_mounted,
|
|
||||||
.become_idle = become_idle,
|
|
||||||
.display_normal = display_normal,
|
|
||||||
.display_password = display_password,
|
|
||||||
.display_question = display_question,
|
|
||||||
.display_message = display_message,
|
|
||||||
.system_update = system_update,
|
|
||||||
};
|
|
||||||
|
|
||||||
return &plugin_interface;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
|
|
||||||
--
|
|
||||||
2.21.0
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
0.222:RCkernelparam
|
|
||||||
0.223:RChostname
|
|
||||||
0.238:RCmountfs
|
|
||||||
0.275:RCswap
|
|
||||||
0.330:microcode_ctl
|
|
||||||
0.357:cpuspeed
|
|
||||||
0.365:ip6tables
|
|
||||||
0.380:iptables
|
|
||||||
0.385:isdn
|
|
||||||
0.504:auditd
|
|
||||||
0.508:restorecond
|
|
||||||
0.523:rsyslog
|
|
||||||
0.530:irqbalance
|
|
||||||
0.533:rpcbind
|
|
||||||
0.549:nfslock
|
|
||||||
0.561:mdmonitor
|
|
||||||
0.563:rpcidmapd
|
|
||||||
0.578:rpcgssd
|
|
||||||
0.579:messagebus
|
|
||||||
0.580:fuse
|
|
||||||
0.594:netfs
|
|
||||||
0.600:acpid
|
|
||||||
0.611:haldaemon
|
|
||||||
0.660:pcscd
|
|
||||||
0.691:udev-post
|
|
||||||
0.703:portreserve
|
|
||||||
0.712:setroubleshoot
|
|
||||||
0.749:bluetooth
|
|
||||||
0.738:sshd
|
|
||||||
0.763:ntpd
|
|
||||||
0.807:sendmail
|
|
||||||
0.876:crond
|
|
||||||
0.902:kerneloops
|
|
||||||
0.907:smolt
|
|
||||||
0.915:atd
|
|
||||||
0.927:avahi-daemon
|
|
||||||
0.941:cups
|
|
||||||
0.983:anacron
|
|
||||||
0.992:local
|
|
@ -1,8 +0,0 @@
|
|||||||
/var/log/boot.log
|
|
||||||
{
|
|
||||||
missingok
|
|
||||||
daily
|
|
||||||
copytruncate
|
|
||||||
rotate 7
|
|
||||||
notifempty
|
|
||||||
}
|
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
dracut -f
|
|
@ -1,154 +0,0 @@
|
|||||||
From f72cdd6969c483d7811e5684fa3143deff55a0c7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ray Strode <rstrode@redhat.com>
|
|
||||||
Date: Mon, 17 Jun 2019 13:54:42 -0400
|
|
||||||
Subject: [PATCH] populate-initrd: ship label plugin
|
|
||||||
|
|
||||||
This gives us font rendering at early boot.
|
|
||||||
---
|
|
||||||
scripts/plymouth-populate-initrd.in | 23 +++++++++++++++++++++--
|
|
||||||
1 file changed, 21 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/scripts/plymouth-populate-initrd.in b/scripts/plymouth-populate-initrd.in
|
|
||||||
index 616ecc4..60fd063 100755
|
|
||||||
--- a/scripts/plymouth-populate-initrd.in
|
|
||||||
+++ b/scripts/plymouth-populate-initrd.in
|
|
||||||
@@ -1,55 +1,56 @@
|
|
||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# inst bits ruthlessly and viciously stolen from dracut
|
|
||||||
|
|
||||||
[ -z "$DESTDIR" ] || exit 0
|
|
||||||
|
|
||||||
# For running on a (cross-compiled) sysroot, the following
|
|
||||||
# settings are needed:
|
|
||||||
# PLYMOUTH_SYSROOT - the sysroot directory
|
|
||||||
# PLYMOUTH_LDD - an optional ldd command that works on foreign binaries
|
|
||||||
# PLYMOUTH_LDD_PATH - optional PATH ldd is run with
|
|
||||||
|
|
||||||
[ -z "$PLYMOUTH_LDD" ] && PLYMOUTH_LDD="ldd"
|
|
||||||
[ -z "$PLYMOUTH_LDD_PATH" ] && PLYMOUTH_LDD_PATH="$PATH"
|
|
||||||
[ -z "$PLYMOUTH_LIBEXECDIR" ] && PLYMOUTH_LIBEXECDIR="@PLYMOUTH_LIBEXECDIR@"
|
|
||||||
[ -z "$PLYMOUTH_DATADIR" ] && PLYMOUTH_DATADIR="@PLYMOUTH_DATADIR@"
|
|
||||||
[ -z "$PLYMOUTH_PLUGIN_PATH" ] && PLYMOUTH_PLUGIN_PATH="$(plymouth --get-splash-plugin-path)"
|
|
||||||
[ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="@PLYMOUTH_LOGO_FILE@"
|
|
||||||
[ -n "$PLYMOUTH_THEME_NAME" ] && THEME_OVERRIDE=1
|
|
||||||
[ -z "$PLYMOUTH_THEME_NAME" ] && PLYMOUTH_THEME_NAME=$(plymouth-set-default-theme)
|
|
||||||
[ -z "$PLYMOUTH_CONFDIR" ] && PLYMOUTH_CONFDIR="@PLYMOUTH_CONF_DIR@"
|
|
||||||
[ -z "$PLYMOUTH_POLICYDIR" ] && PLYMOUTH_POLICYDIR="@PLYMOUTH_POLICY_DIR@"
|
|
||||||
[ -z "$PLYMOUTH_DAEMON_PATH" ] && PLYMOUTH_DAEMON_PATH="@PLYMOUTH_DAEMON_DIR@/plymouthd"
|
|
||||||
[ -z "$PLYMOUTH_CLIENT_PATH" ] && PLYMOUTH_CLIENT_PATH="@PLYMOUTH_CLIENT_DIR@/plymouth"
|
|
||||||
[ -z "$SYSTEMD_UNIT_DIR" ] && SYSTEMD_UNIT_DIR="@SYSTEMD_UNIT_DIR@"
|
|
||||||
+[ -z "$SUPPORTED_LANGUAGES" ] && SUPPORTED_LANGUAGES="pt fr de it ru es en zh ja ko zh as bn gu hi kn ml mr or pa ta te"
|
|
||||||
|
|
||||||
# Generic substring function. If $2 is in $1, return 0.
|
|
||||||
strstr() { [ "${1#*$2*}" != "$1" ]; }
|
|
||||||
|
|
||||||
ddebug() {
|
|
||||||
[ "$verbose" = "true" ] && echo "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# normalize_path <path>
|
|
||||||
# Prints the normalized path, where it removes any duplicated
|
|
||||||
# and trailing slashes.
|
|
||||||
# Example:
|
|
||||||
# $ normalize_path ///test/test//
|
|
||||||
# /test/test
|
|
||||||
normalize_path() {
|
|
||||||
shopt -q -s extglob
|
|
||||||
set -- "${1//+(\/)//}"
|
|
||||||
shopt -q -u extglob
|
|
||||||
echo "${1%/}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# convert_abs_rel <from> <to>
|
|
||||||
# Prints the relative path, when creating a symlink to <to> from <from>.
|
|
||||||
# Example:
|
|
||||||
# $ convert_abs_rel /usr/bin/test /bin/test-2
|
|
||||||
# ../../bin/test-2
|
|
||||||
# $ ln -s $(convert_abs_rel /usr/bin/test /bin/test-2) /usr/bin/test
|
|
||||||
convert_abs_rel() {
|
|
||||||
local __current __absolute __abssize __cursize __newpath
|
|
||||||
local -i __i __level
|
|
||||||
@@ -434,59 +435,77 @@ if [ $THEME_OVERRIDE ]; then
|
|
||||||
conf=$INITRDDIR/${PLYMOUTH_CONFDIR}/plymouthd.conf
|
|
||||||
echo "modifying plymouthd.conf: Theme=$PLYMOUTH_THEME_NAME" >&2
|
|
||||||
# make sure the section and key exist so we can modify them
|
|
||||||
grep -q "^ *\[Daemon\]" $conf || echo "[Daemon]" >> $conf
|
|
||||||
grep -q "^ *Theme *=" $conf || echo "Theme=fade-in" >> $conf
|
|
||||||
sed -i "s/^ *Theme *=.*/# theme modified by plymouth-populate-initrd\nTheme=$PLYMOUTH_THEME_NAME/" $conf
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLYMOUTH_MODULE_NAME=$(grep "ModuleName *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ModuleName *= *//')
|
|
||||||
PLYMOUTH_THEME_DIR="${PLYMOUTH_DATADIR}/plymouth/themes/${PLYMOUTH_THEME_NAME}"
|
|
||||||
PLYMOUTH_IMAGE_DIR=$(grep "ImageDir *= *" ${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}/${PLYMOUTH_THEME_NAME}.plymouth | sed 's/ImageDir *= *//')
|
|
||||||
|
|
||||||
if [ ! -f ${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so ]; then
|
|
||||||
echo "The default plymouth plugin (${PLYMOUTH_MODULE_NAME}) doesn't exist" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
inst ${PLYMOUTH_PLUGIN_PATH}/${PLYMOUTH_MODULE_NAME}.so $INITRDDIR
|
|
||||||
|
|
||||||
[ -f "${PLYMOUTH_SYSROOT}${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so" ] && inst ${PLYMOUTH_PLUGIN_PATH}/renderers/drm.so $INITRDDIR
|
|
||||||
inst ${PLYMOUTH_PLUGIN_PATH}/renderers/frame-buffer.so $INITRDDIR
|
|
||||||
|
|
||||||
if [ -d "${PLYMOUTH_SYSROOT}${PLYMOUTH_THEME_DIR}" ]; then
|
|
||||||
inst_recur "${PLYMOUTH_THEME_DIR}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${PLYMOUTH_IMAGE_DIR}" != "${PLYMOUTH_THEME_DIR}" -a -d "${PLYMOUTH_SYSROOT}${PLYMOUTH_IMAGE_DIR}" ]; then
|
|
||||||
inst_recur "${PLYMOUTH_IMAGE_DIR}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
-if [ -L ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then
|
|
||||||
- cp -a ${PLYMOUTH_SYSROOT}${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes
|
|
||||||
+fonts=""
|
|
||||||
+needs_graphics="$(find ${INITRDDIR} -name 'libply-splash-graphics.so*' -print -quit | grep -q libply-splash-graphics.so && echo -n 1)"
|
|
||||||
+
|
|
||||||
+if [ -n "$needs_graphics" ]; then
|
|
||||||
+ for lang in $SUPPORTED_LANGUAGES; do
|
|
||||||
+ font=$(fc-match "":lang="$lang" file | awk -F= '{ print $2}')
|
|
||||||
+ echo $fonts | grep -q "$font" && continue
|
|
||||||
+ fonts="$fonts $font"
|
|
||||||
+ done
|
|
||||||
+
|
|
||||||
+ if [ -n "$fonts" ]; then
|
|
||||||
+ inst ${PLYMOUTH_PLUGIN_PATH}/label.so $INITRDDIR
|
|
||||||
+ for font in $fonts; do
|
|
||||||
+ inst $font $INITRDDIR
|
|
||||||
+ done
|
|
||||||
+ fi
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+if [ -L ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth ]; then
|
|
||||||
+ cp -a ${PLYMOUTH_DATADIR}/plymouth/themes/default.plymouth $INITRDDIR${PLYMOUTH_DATADIR}/plymouth/themes
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$SYSTEMD_UNIT_DIR" -a -d "${PLYMOUTH_SYSROOT}$SYSTEMD_UNIT_DIR" ]; then
|
|
||||||
inst $SYSTEMD_UNIT_DIR/systemd-ask-password-plymouth.path $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/systemd-ask-password-plymouth.service $INITRDDIR
|
|
||||||
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-switch-root.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-start.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-quit.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-quit-wait.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-reboot.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-kexec.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-poweroff.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/plymouth-halt.service $INITRDDIR
|
|
||||||
|
|
||||||
inst $SYSTEMD_UNIT_DIR/initrd-switch-root.target.wants/plymouth-switch-root.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/initrd-switch-root.target.wants/plymouth-start.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/sysinit.target.wants/plymouth-start.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/multi-user.target.wants/plymouth-quit.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/multi-user.target.wants/plymouth-quit-wait.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/reboot.target.wants/plymouth-reboot.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/kexec.target.wants/plymouth-kexec.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/poweroff.target.wants/plymouth-poweroff.service $INITRDDIR
|
|
||||||
inst $SYSTEMD_UNIT_DIR/halt.target.wants/plymouth-halt.service $INITRDDIR
|
|
||||||
fi
|
|
||||||
|
|
||||||
# vim:ts=8:sw=4:sts=4:et
|
|
||||||
--
|
|
||||||
2.21.0
|
|
||||||
|
|
1294
SPECS/plymouth.spec
1294
SPECS/plymouth.spec
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,12 @@
|
|||||||
[Plymouth Theme]
|
[Plymouth Theme]
|
||||||
Name=Charge
|
Name=Charge
|
||||||
Description=A theme that features a stylized 8 and spinner
|
Description=A theme that features the shadowy hull of a Fedora logo charge up and and finally burst into into full form.
|
||||||
ModuleName=two-step
|
ModuleName=two-step
|
||||||
|
|
||||||
[two-step]
|
[two-step]
|
||||||
ImageDir=/usr/share/plymouth/themes/charge
|
ImageDir=/usr/share/plymouth/themes/charge
|
||||||
HorizontalAlignment=.5
|
HorizontalAlignment=.5
|
||||||
VerticalAlignment=.75
|
VerticalAlignment=.5
|
||||||
Transition=none
|
Transition=none
|
||||||
TransitionDuration=0.0
|
TransitionDuration=0.0
|
||||||
BackgroundStartColor=0x202020
|
BackgroundStartColor=0x202020
|
6
gating.yaml
Normal file
6
gating.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
--- !Policy
|
||||||
|
product_versions:
|
||||||
|
- rhel-10
|
||||||
|
decision_context: osci_compose_gate
|
||||||
|
rules:
|
||||||
|
- !PassingTestCaseRule {test_case_name: desktop-qe.desktop-ci.tier1-gating.functional}
|
556
plymouth-24.004.60-immediately-probe-simpledrm.patch
Normal file
556
plymouth-24.004.60-immediately-probe-simpledrm.patch
Normal file
@ -0,0 +1,556 @@
|
|||||||
|
From 64379c1100a0177f52e130601d44a7ffe0fdedf1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Tue, 4 Jun 2024 21:09:00 +0200
|
||||||
|
Subject: [PATCH 1/9] ply-utils: Add ply_string_has_suffix () helper function
|
||||||
|
|
||||||
|
Add a ply_string_has_suffix () helper function to match the existing
|
||||||
|
ply_string_has_prefix () helper function.
|
||||||
|
---
|
||||||
|
src/libply/ply-utils.c | 18 ++++++++++++++++++
|
||||||
|
src/libply/ply-utils.h | 2 ++
|
||||||
|
2 files changed, 20 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libply/ply-utils.c b/src/libply/ply-utils.c
|
||||||
|
index 0e317b67..d6d127f1 100644
|
||||||
|
--- a/src/libply/ply-utils.c
|
||||||
|
+++ b/src/libply/ply-utils.c
|
||||||
|
@@ -473,6 +473,24 @@ ply_string_has_prefix (const char *str,
|
||||||
|
return strncmp (str, prefix, strlen (prefix)) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+bool
|
||||||
|
+ply_string_has_suffix (const char *str,
|
||||||
|
+ const char *suffix)
|
||||||
|
+{
|
||||||
|
+ size_t str_len, suffix_len;
|
||||||
|
+
|
||||||
|
+ if (str == NULL || suffix == NULL)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ str_len = strlen (str);
|
||||||
|
+ suffix_len = strlen (suffix);
|
||||||
|
+
|
||||||
|
+ if (suffix_len > str_len)
|
||||||
|
+ return false;
|
||||||
|
+
|
||||||
|
+ return strcmp (str + (str_len - suffix_len), suffix) == 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
double
|
||||||
|
ply_get_timestamp (void)
|
||||||
|
{
|
||||||
|
diff --git a/src/libply/ply-utils.h b/src/libply/ply-utils.h
|
||||||
|
index 7cbbb2f4..86d66384 100644
|
||||||
|
--- a/src/libply/ply-utils.h
|
||||||
|
+++ b/src/libply/ply-utils.h
|
||||||
|
@@ -109,6 +109,8 @@ char **ply_copy_string_array (const char *const *array);
|
||||||
|
void ply_free_string_array (char **array);
|
||||||
|
bool ply_string_has_prefix (const char *str,
|
||||||
|
const char *prefix);
|
||||||
|
+bool ply_string_has_suffix (const char *str,
|
||||||
|
+ const char *suffix);
|
||||||
|
double ply_get_timestamp (void);
|
||||||
|
|
||||||
|
void ply_save_errno (void);
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 1c3ff0338c80a831b2f0ea63a57e20c9013ddb52 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Tue, 4 Jun 2024 21:16:31 +0200
|
||||||
|
Subject: [PATCH 2/9] ply-device-manager: Add syspath_is_simpledrm () helper
|
||||||
|
|
||||||
|
Add a helper to determine if a udev syspath is a simpledrm device.
|
||||||
|
This is a preparation patch to for making simpledrm devices their
|
||||||
|
own renderer-type.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 11 +++++++----
|
||||||
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index d75ac6c5..4c48f606 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -339,11 +339,15 @@ remove_input_device_from_renderers (ply_device_manager_t *manager,
|
||||||
|
ply_hashtable_foreach (manager->renderers, (ply_hashtable_foreach_func_t *) on_each_input_device_remove_from_renderer, input_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool
|
||||||
|
+syspath_is_simpledrm (const char *syspath)
|
||||||
|
+{
|
||||||
|
+ return ply_string_has_suffix (syspath, "simple-framebuffer.0/drm/card0");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool
|
||||||
|
verify_drm_device (struct udev_device *device)
|
||||||
|
{
|
||||||
|
- const char *id_path;
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Simple-framebuffer devices driven by simpledrm lack information
|
||||||
|
* like panel-rotation info and physical size, causing the splash
|
||||||
|
@@ -352,8 +356,7 @@ verify_drm_device (struct udev_device *device)
|
||||||
|
* To avoid this treat simpledrm devices as fbdev devices and only
|
||||||
|
* use them after the timeout.
|
||||||
|
*/
|
||||||
|
- id_path = udev_device_get_property_value (device, "ID_PATH");
|
||||||
|
- if (!ply_string_has_prefix (id_path, "platform-simple-framebuffer"))
|
||||||
|
+ if (!syspath_is_simpledrm (udev_device_get_syspath (device)))
|
||||||
|
return true; /* Not a SimpleDRM device */
|
||||||
|
|
||||||
|
/*
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 19d49a42fcc3cf9d3ee62a572eec24e8b73f9799 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Tue, 4 Jun 2024 21:24:22 +0200
|
||||||
|
Subject: [PATCH 3/9] ply-renderer: Add new PLY_RENDERER_TYPE_SIMPLEDRM
|
||||||
|
renderer-type
|
||||||
|
|
||||||
|
Add a new PLY_RENDERER_TYPE_SIMPLEDRM renderer-type to help differentiate
|
||||||
|
the simpledrm case from the regular drm device case.
|
||||||
|
|
||||||
|
simpledrm devices require some special handling in the device-manager,
|
||||||
|
this is a preparation patch for improving the simpledrm handling
|
||||||
|
in ply-device-manager.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 11 ++++++++---
|
||||||
|
src/libply-splash-core/ply-renderer.c | 1 +
|
||||||
|
src/libply-splash-core/ply-renderer.h | 1 +
|
||||||
|
3 files changed, 10 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 4c48f606..256b38d0 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -380,7 +380,7 @@ static bool
|
||||||
|
create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
struct udev_device *device)
|
||||||
|
{
|
||||||
|
- const char *device_path, *device_sysname;
|
||||||
|
+ const char *device_path, *device_sysname, *device_syspath;
|
||||||
|
bool created = false;
|
||||||
|
bool force_fb = false;
|
||||||
|
|
||||||
|
@@ -389,6 +389,7 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
|
||||||
|
device_path = udev_device_get_devnode (device);
|
||||||
|
device_sysname = udev_device_get_sysname (device);
|
||||||
|
+ device_syspath = udev_device_get_syspath (device);
|
||||||
|
|
||||||
|
if (device_path != NULL) {
|
||||||
|
const char *subsystem;
|
||||||
|
@@ -403,7 +404,10 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ply_trace ("found DRM device %s", device_path);
|
||||||
|
- renderer_type = PLY_RENDERER_TYPE_DRM;
|
||||||
|
+ if (syspath_is_simpledrm (device_syspath))
|
||||||
|
+ renderer_type = PLY_RENDERER_TYPE_SIMPLEDRM;
|
||||||
|
+ else
|
||||||
|
+ renderer_type = PLY_RENDERER_TYPE_DRM;
|
||||||
|
} else if (strcmp (subsystem, SUBSYSTEM_FRAME_BUFFER) == 0) {
|
||||||
|
ply_trace ("found frame buffer device %s", device_path);
|
||||||
|
if (!fb_device_has_drm_device (manager, device))
|
||||||
|
@@ -446,7 +450,8 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
terminal,
|
||||||
|
renderer_type);
|
||||||
|
if (created) {
|
||||||
|
- if (renderer_type == PLY_RENDERER_TYPE_DRM)
|
||||||
|
+ if (renderer_type == PLY_RENDERER_TYPE_DRM ||
|
||||||
|
+ renderer_type == PLY_RENDERER_TYPE_SIMPLEDRM)
|
||||||
|
manager->found_drm_device = 1;
|
||||||
|
if (renderer_type == PLY_RENDERER_TYPE_FRAME_BUFFER)
|
||||||
|
manager->found_fb_device = 1;
|
||||||
|
diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c
|
||||||
|
index 40a2c813..6a7aff96 100644
|
||||||
|
--- a/src/libply-splash-core/ply-renderer.c
|
||||||
|
+++ b/src/libply-splash-core/ply-renderer.c
|
||||||
|
@@ -269,6 +269,7 @@ ply_renderer_open (ply_renderer_t *renderer)
|
||||||
|
{
|
||||||
|
{ PLY_RENDERER_TYPE_X11, PLYMOUTH_PLUGIN_PATH "renderers/x11.so" },
|
||||||
|
{ PLY_RENDERER_TYPE_DRM, PLYMOUTH_PLUGIN_PATH "renderers/drm.so" },
|
||||||
|
+ { PLY_RENDERER_TYPE_SIMPLEDRM, PLYMOUTH_PLUGIN_PATH "renderers/drm.so" },
|
||||||
|
{ PLY_RENDERER_TYPE_FRAME_BUFFER, PLYMOUTH_PLUGIN_PATH "renderers/frame-buffer.so" },
|
||||||
|
{ PLY_RENDERER_TYPE_NONE, NULL }
|
||||||
|
};
|
||||||
|
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
|
||||||
|
index 5fbf819d..34ff5886 100644
|
||||||
|
--- a/src/libply-splash-core/ply-renderer.h
|
||||||
|
+++ b/src/libply-splash-core/ply-renderer.h
|
||||||
|
@@ -41,6 +41,7 @@ typedef enum
|
||||||
|
PLY_RENDERER_TYPE_NONE = -1,
|
||||||
|
PLY_RENDERER_TYPE_AUTO,
|
||||||
|
PLY_RENDERER_TYPE_DRM,
|
||||||
|
+ PLY_RENDERER_TYPE_SIMPLEDRM,
|
||||||
|
PLY_RENDERER_TYPE_FRAME_BUFFER,
|
||||||
|
PLY_RENDERER_TYPE_X11
|
||||||
|
} ply_renderer_type_t;
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 188a4393b11fdb25f1fcc7e1ca763d62374b3d70 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Tue, 4 Jun 2024 22:05:20 +0200
|
||||||
|
Subject: [PATCH 4/9] ply-renderer: Add ply_renderer_get_type ()
|
||||||
|
|
||||||
|
Add a ply_renderer_get_type () helper function to get the type of
|
||||||
|
a renderer.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-renderer.c | 6 ++++++
|
||||||
|
src/libply-splash-core/ply-renderer.h | 1 +
|
||||||
|
2 files changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-renderer.c b/src/libply-splash-core/ply-renderer.c
|
||||||
|
index 6a7aff96..61c59ccc 100644
|
||||||
|
--- a/src/libply-splash-core/ply-renderer.c
|
||||||
|
+++ b/src/libply-splash-core/ply-renderer.c
|
||||||
|
@@ -102,6 +102,12 @@ ply_renderer_get_device_name (ply_renderer_t *renderer)
|
||||||
|
return renderer->device_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ply_renderer_type_t
|
||||||
|
+ply_renderer_get_type (ply_renderer_t *renderer)
|
||||||
|
+{
|
||||||
|
+ return renderer->type;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool
|
||||||
|
ply_renderer_load_plugin (ply_renderer_t *renderer,
|
||||||
|
const char *module_path)
|
||||||
|
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
|
||||||
|
index 34ff5886..cfd4f2dd 100644
|
||||||
|
--- a/src/libply-splash-core/ply-renderer.h
|
||||||
|
+++ b/src/libply-splash-core/ply-renderer.h
|
||||||
|
@@ -63,6 +63,7 @@ void ply_renderer_activate (ply_renderer_t *renderer);
|
||||||
|
void ply_renderer_deactivate (ply_renderer_t *renderer);
|
||||||
|
bool ply_renderer_is_active (ply_renderer_t *renderer);
|
||||||
|
const char *ply_renderer_get_device_name (ply_renderer_t *renderer);
|
||||||
|
+ply_renderer_type_t ply_renderer_get_type (ply_renderer_t *renderer);
|
||||||
|
ply_list_t *ply_renderer_get_heads (ply_renderer_t *renderer);
|
||||||
|
ply_pixel_buffer_t *ply_renderer_get_buffer_for_head (ply_renderer_t *renderer,
|
||||||
|
ply_renderer_head_t *head);
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 9096b304f6bec090ed53aa280f234c2b4fd18828 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Wed, 5 Jun 2024 21:31:55 +0200
|
||||||
|
Subject: [PATCH 5/9] ply-device-manager: Skip /dev/dri/render nodes
|
||||||
|
|
||||||
|
DRM render nodes do not support KMS and trying to probe them just
|
||||||
|
slows things down, so skip them.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 256b38d0..51990b7c 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -403,6 +403,10 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
ply_trace ("ignoring since we only handle SimpleDRM devices after timeout");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
+ if (ply_string_has_prefix (device_path, "/dev/dri/render")) {
|
||||||
|
+ ply_trace ("ignoring since it is a render node");
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
ply_trace ("found DRM device %s", device_path);
|
||||||
|
if (syspath_is_simpledrm (device_syspath))
|
||||||
|
renderer_type = PLY_RENDERER_TYPE_SIMPLEDRM;
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From eb5abda0c2fbcd88892f2fbd346a1ac2413cc8ad Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Wed, 5 Jun 2024 21:38:43 +0200
|
||||||
|
Subject: [PATCH 6/9] ply-device-manager: Move local_console_terminal handling
|
||||||
|
for DRM/FB renderers
|
||||||
|
|
||||||
|
create_devices_for_terminal_and_renderer_type () only ever gets called with
|
||||||
|
a NULL terminal parameter when create_devices_for_udev_device () is calling
|
||||||
|
it to create a DRM or FB renderer.
|
||||||
|
|
||||||
|
Move the use of local_console_terminal as terminal for the first DRM / FB
|
||||||
|
renderer created from create_devices_for_udev_device () to
|
||||||
|
create_devices_for_terminal_and_renderer_type () with an extra !terminal
|
||||||
|
check.
|
||||||
|
|
||||||
|
This is a preparation patch for fixing an issue where the local_console
|
||||||
|
is managed by a simpledrm renderer and the remove event for that gets
|
||||||
|
processed after the add event of the normal drm device which leaves
|
||||||
|
the local_console unmanaged breaking legacy input support.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 15 ++++++---------
|
||||||
|
1 file changed, 6 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 51990b7c..65504e93 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -441,17 +441,9 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (renderer_type != PLY_RENDERER_TYPE_NONE) {
|
||||||
|
- ply_terminal_t *terminal = NULL;
|
||||||
|
-
|
||||||
|
- if (!manager->local_console_managed &&
|
||||||
|
- manager->local_console_terminal != NULL &&
|
||||||
|
- ply_terminal_is_vt (manager->local_console_terminal)) {
|
||||||
|
- terminal = manager->local_console_terminal;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
created = create_devices_for_terminal_and_renderer_type (manager,
|
||||||
|
device_path,
|
||||||
|
- terminal,
|
||||||
|
+ NULL,
|
||||||
|
renderer_type);
|
||||||
|
if (created) {
|
||||||
|
if (renderer_type == PLY_RENDERER_TYPE_DRM ||
|
||||||
|
@@ -1105,6 +1097,11 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!terminal && !manager->local_console_managed &&
|
||||||
|
+ manager->local_console_terminal != NULL &&
|
||||||
|
+ ply_terminal_is_vt (manager->local_console_terminal))
|
||||||
|
+ terminal = manager->local_console_terminal;
|
||||||
|
+
|
||||||
|
ply_trace ("creating devices for %s (renderer type: %u) (terminal: %s)",
|
||||||
|
device_path ? : "", renderer_type, terminal ? ply_terminal_get_name (terminal) : "none");
|
||||||
|
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 8c0d5965030aae11249cbe1e42decc0654005c39 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Wed, 5 Jun 2024 21:52:19 +0200
|
||||||
|
Subject: [PATCH 7/9] ply-device-manager: Remove simpledrm renderers before
|
||||||
|
adding normal drm renderers
|
||||||
|
|
||||||
|
udev remove events for simpledrm udev devices may arrive after the udev add
|
||||||
|
event for a normal drm udev device which is replacing the simpledrm device.
|
||||||
|
|
||||||
|
When the local_console is managed by a simpledrm renderer and the remove
|
||||||
|
event for the simpledrm renderer is received after the add event of
|
||||||
|
the normal drm device, the local_console is left unmanaged breaking legacy
|
||||||
|
input support.
|
||||||
|
|
||||||
|
When this scenario gets hit it breaks entering disk unlock passwords.
|
||||||
|
|
||||||
|
Add code to remove simpledrm renderers before adding normal drm renderers
|
||||||
|
to avoid this.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 24 +++++++++++++++++++++
|
||||||
|
1 file changed, 24 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 65504e93..1c9560d7 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -1080,6 +1080,18 @@ create_text_displays_for_terminal (ply_device_manager_t *manager,
|
||||||
|
manager->text_display_added_handler (manager->event_handler_data, display);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+free_simpledrm_renderer (char *device_path,
|
||||||
|
+ ply_renderer_t *renderer,
|
||||||
|
+ ply_device_manager_t *manager)
|
||||||
|
+{
|
||||||
|
+ if (ply_renderer_get_type (renderer) != PLY_RENDERER_TYPE_SIMPLEDRM)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ ply_trace ("removing simpledrm renderer %s", device_path);
|
||||||
|
+ free_devices_from_device_path (manager, device_path, true);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool
|
||||||
|
create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||||
|
const char *device_path,
|
||||||
|
@@ -1097,6 +1109,18 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * simpledrm udev remove events may arrive after normal drm device add
|
||||||
|
+ * events, leaving the local_console unmanaged breaking legacy input.
|
||||||
|
+ * Remove simpledrm renderers before adding drm renderers to avoid this.
|
||||||
|
+ */
|
||||||
|
+ if (renderer_type == PLY_RENDERER_TYPE_DRM) {
|
||||||
|
+ ply_hashtable_foreach (manager->renderers,
|
||||||
|
+ (ply_hashtable_foreach_func_t *)
|
||||||
|
+ free_simpledrm_renderer,
|
||||||
|
+ manager);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!terminal && !manager->local_console_managed &&
|
||||||
|
manager->local_console_terminal != NULL &&
|
||||||
|
ply_terminal_is_vt (manager->local_console_terminal))
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 2f8b64ea4c6cefca6569ab94dc37d436a3fbf048 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Tue, 4 Jun 2024 23:07:19 +0200
|
||||||
|
Subject: [PATCH 8/9] ply-device-manager: Create renderer for simpledrm devices
|
||||||
|
right away
|
||||||
|
|
||||||
|
Often when plymouth starts and enumerates udev devices which are already
|
||||||
|
present at start (coldplug detection), udev is still initializing all
|
||||||
|
the devices and it reports 0 for udev_device_get_is_initialized ().
|
||||||
|
|
||||||
|
It may take a long time for the state of the simpledrm udev device
|
||||||
|
to change to initialized and for a udev add event to be send.
|
||||||
|
|
||||||
|
Especially when the amdgpu kernel module is involved which is very
|
||||||
|
large for a kernel module and can take op to 7 seconds to load.
|
||||||
|
|
||||||
|
In this case it is even possible for plymouth's default DeviceTimeout
|
||||||
|
of 8 seconds to trigger before the simpledrm device is considered
|
||||||
|
initialized. See for example these lines extracted from the plymouth-debug
|
||||||
|
log attached to: https://bugzilla.redhat.com/show_bug.cgi?id=2183743
|
||||||
|
|
||||||
|
00:00:02.909 ../src/libply-splash-core/ply-device-manager.c:498:create_devi: found device /sys/devices/pci0000:00/0000:00:01.0/simple-framebuffer.0/drm/card0
|
||||||
|
00:00:02.910 ../src/libply-splash-core/ply-device-manager.c:513:create_devi: it's not initialized
|
||||||
|
00:00:10.917 ../src/libply-splash-core/ply-device-manager.c:1237:create_dev: Timeout elapsed, looking for devices from udev
|
||||||
|
00:00:10.918 ../src/libply-splash-core/ply-device-manager.c:498:create_devi: found device /sys/devices/pci0000:00/0000:00:01.0/simple-framebuffer.0/drm/card0
|
||||||
|
00:00:10.918 ../src/libply-splash-core/ply-device-manager.c:513:create_devi: it's not initialized
|
||||||
|
|
||||||
|
This leads to plymouth falling back to the text splash even when
|
||||||
|
plymouth.use-simpledrm is passed on the kernel commandline.
|
||||||
|
|
||||||
|
Add a special case for simpledrm devices and add these during coldboot
|
||||||
|
even if they are not initialized yet.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 10 ++++++----
|
||||||
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 1c9560d7..90a60661 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -490,6 +490,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||||
|
udev_list_entry_foreach (entry, udev_enumerate_get_list_entry (matches)){
|
||||||
|
struct udev_device *device = NULL;
|
||||||
|
const char *path, *node;
|
||||||
|
+ int initialized;
|
||||||
|
|
||||||
|
path = udev_list_entry_get_name (entry);
|
||||||
|
|
||||||
|
@@ -502,10 +503,11 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||||
|
|
||||||
|
device = udev_device_new_from_syspath (manager->udev_context, path);
|
||||||
|
|
||||||
|
- /* if device isn't fully initialized, we'll get an add event later
|
||||||
|
- */
|
||||||
|
- if (udev_device_get_is_initialized (device)) {
|
||||||
|
- ply_trace ("device is initialized");
|
||||||
|
+ /* If device isn't fully initialized, we'll get an add event later */
|
||||||
|
+ initialized = udev_device_get_is_initialized (device);
|
||||||
|
+ /* Simpledrm can be handled uninitialized and this shows the splash sooner */
|
||||||
|
+ if (initialized || syspath_is_simpledrm (path)) {
|
||||||
|
+ ply_trace ("device is initialized %d", initialized);
|
||||||
|
|
||||||
|
node = udev_device_get_devnode (device);
|
||||||
|
if (node != NULL) {
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From 12fdedb4efb0b7e04c74f43917a180a20e54ea24 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
Date: Wed, 5 Jun 2024 22:07:32 +0200
|
||||||
|
Subject: [PATCH 9/9] ply-device-manager: Make create_devices_for_subsystem ()
|
||||||
|
return void
|
||||||
|
|
||||||
|
Make create_devices_for_subsystem () return void. Its callers do not care
|
||||||
|
about the return value and currently the return value is not always correct
|
||||||
|
since if a device is found, found may later become false again if
|
||||||
|
a subsequent create_devices_for_udev_device () call fails.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-device-manager.c | 11 ++++-------
|
||||||
|
1 file changed, 4 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
index 90a60661..1f41e1b2 100644
|
||||||
|
--- a/src/libply-splash-core/ply-device-manager.c
|
||||||
|
+++ b/src/libply-splash-core/ply-device-manager.c
|
||||||
|
@@ -458,23 +458,22 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static bool
|
||||||
|
+static void
|
||||||
|
create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||||
|
const char *subsystem)
|
||||||
|
{
|
||||||
|
struct udev_enumerate *matches;
|
||||||
|
struct udev_list_entry *entry;
|
||||||
|
- bool found_device = false;
|
||||||
|
|
||||||
|
if (strcmp (subsystem, SUBSYSTEM_INPUT) == 0) {
|
||||||
|
if (ply_kernel_command_line_has_argument ("plymouth.use-legacy-input")) {
|
||||||
|
ply_trace ("Not creating devices for subsystem " SUBSYSTEM_INPUT " because plymouth.use-legacy-input on command line");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (manager->xkb_keymap == NULL) {
|
||||||
|
ply_trace ("Not creating devices for subsystem " SUBSYSTEM_INPUT " because there is no configure XKB layout");
|
||||||
|
- return false;
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -512,7 +511,7 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||||
|
node = udev_device_get_devnode (device);
|
||||||
|
if (node != NULL) {
|
||||||
|
ply_trace ("found node %s", node);
|
||||||
|
- found_device = create_devices_for_udev_device (manager, device);
|
||||||
|
+ create_devices_for_udev_device (manager, device);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ply_trace ("it's not initialized");
|
||||||
|
@@ -522,8 +521,6 @@ create_devices_for_subsystem (ply_device_manager_t *manager,
|
||||||
|
}
|
||||||
|
|
||||||
|
udev_enumerate_unref (matches);
|
||||||
|
-
|
||||||
|
- return found_device;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
|
From f8043095b8a2eb69b18947d925b30cee95e4c1fe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adrian Vovk <adrianvovk@gmail.com>
|
||||||
|
Date: Tue, 29 Apr 2025 14:44:48 -0400
|
||||||
|
Subject: [PATCH] Fix ABI incompatibility
|
||||||
|
|
||||||
|
A previous commit in this patch series accidentally introduced an ABI
|
||||||
|
incompatiblity: PLY_RENRERER_TYPE_{FRAME_BUFFER,X11} changed their values.
|
||||||
|
Let's undo that.
|
||||||
|
---
|
||||||
|
src/libply-splash-core/ply-renderer.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/libply-splash-core/ply-renderer.h b/src/libply-splash-core/ply-renderer.h
|
||||||
|
index cfd4f2dd..b667ff6d 100644
|
||||||
|
--- a/src/libply-splash-core/ply-renderer.h
|
||||||
|
+++ b/src/libply-splash-core/ply-renderer.h
|
||||||
|
@@ -41,9 +41,9 @@ typedef enum
|
||||||
|
PLY_RENDERER_TYPE_NONE = -1,
|
||||||
|
PLY_RENDERER_TYPE_AUTO,
|
||||||
|
PLY_RENDERER_TYPE_DRM,
|
||||||
|
- PLY_RENDERER_TYPE_SIMPLEDRM,
|
||||||
|
PLY_RENDERER_TYPE_FRAME_BUFFER,
|
||||||
|
- PLY_RENDERER_TYPE_X11
|
||||||
|
+ PLY_RENDERER_TYPE_X11,
|
||||||
|
+ PLY_RENDERER_TYPE_SIMPLEDRM
|
||||||
|
} ply_renderer_type_t;
|
||||||
|
|
||||||
|
typedef void (*ply_renderer_input_source_handler_t) (void *user_data,
|
||||||
|
--
|
||||||
|
2.47.1
|
16
plymouth.rpmlintrc
Normal file
16
plymouth.rpmlintrc
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
addFilter("incorrect-fsf-address")
|
||||||
|
addFilter("no-manual-page-for-binary")
|
||||||
|
addFilter("no-documentation")
|
||||||
|
# Spinfinity has a symlink to /usr/share/pixmaps/system-logo-white.png
|
||||||
|
addFilter("dangling-symlink")
|
||||||
|
# Suppress the error from the ghosted /var/lib/plymouth/boot-duration file
|
||||||
|
addFilter("non-readable")
|
||||||
|
# Upstream (and RHEL) has named the logrotate file after the logfilename
|
||||||
|
# rather then after the package-name
|
||||||
|
addFilter("incoherent-logrotate-file")
|
||||||
|
# No provides, the throbgress plugin has been removed upstream
|
||||||
|
addFilter("obsolete-not-provided plymouth-plugin-throbgress")
|
||||||
|
# Some files are shared between themes
|
||||||
|
addFilter("files-duplicate")
|
||||||
|
# Some of our packages have no binaries, this is fine
|
||||||
|
addFilter("no-binary")
|
448
plymouth.spec
Normal file
448
plymouth.spec
Normal file
@ -0,0 +1,448 @@
|
|||||||
|
Summary: Graphical Boot Animation and Logger
|
||||||
|
Name: plymouth
|
||||||
|
Version: 24.004.60
|
||||||
|
Release: %autorelease
|
||||||
|
License: GPL-2.0-or-later
|
||||||
|
URL: http://www.freedesktop.org/wiki/Software/Plymouth
|
||||||
|
|
||||||
|
Source0: https://gitlab.freedesktop.org/plymouth/plymouth/-/archive/%{version}/%{name}-%{version}.tar.bz2
|
||||||
|
Source2: charge.plymouth
|
||||||
|
|
||||||
|
# Revert https://gitlab.freedesktop.org/plymouth/plymouth/-/commit/48881ba
|
||||||
|
# to fix console display on minimal installs
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2269385
|
||||||
|
Patch: 0001-Revert-src-Hide-console-text-when-splash-is-requeste.patch
|
||||||
|
|
||||||
|
# https://gitlab.freedesktop.org/plymouth/plymouth/-/commit/10ac8d2dc927b112ce6aeb06bc73d9c46550954c
|
||||||
|
# Fix encryption passphrase appearing in plain text in text mode
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2271337
|
||||||
|
Patch: 0001-ply-boot-splash-Set-unbuffered-input-when-creating-a.patch
|
||||||
|
|
||||||
|
# Revert patch to immediately switch to text mode on first renderer plugin error
|
||||||
|
# Fixes unwanted text mode when drm-plugin init races with simpledrm unregistration
|
||||||
|
# https://gitlab.freedesktop.org/plymouth/plymouth/-/merge_requests/319
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2270030
|
||||||
|
Patch: 0001-ply-device-manager-Revert-Fall-back-to-text-plugin-i.patch
|
||||||
|
|
||||||
|
# Probe simpledrm immediately instead of waiting for udev_device_get_is_initialized ()
|
||||||
|
# to return true. This fixes users getting the text splash on laptops with somewhat
|
||||||
|
# slower CPUs combined with loading the amdgpu module which may take 7+ seconds
|
||||||
|
# https://gitlab.freedesktop.org/plymouth/plymouth/-/merge_requests/323/
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2183743
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2274770
|
||||||
|
Patch: plymouth-24.004.60-immediately-probe-simpledrm.patch
|
||||||
|
|
||||||
|
# Backport of upstream commit 709f21e80199ee51badff2d9b5dc6bae8af2a1a1
|
||||||
|
# "renderers: Do not assume all keyboards have LEDs"
|
||||||
|
# This fixes:
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2282384
|
||||||
|
Patch: 0001-renderers-Do-not-assume-all-keyboards-have-LEDs.patch
|
||||||
|
|
||||||
|
Patch: 0001-details-dont-duplicate-output-on-console.patch
|
||||||
|
|
||||||
|
BuildRequires: meson
|
||||||
|
BuildRequires: system-logos
|
||||||
|
BuildRequires: gcc libtool git
|
||||||
|
BuildRequires: pkgconfig(libdrm)
|
||||||
|
BuildRequires: pkgconfig(libevdev)
|
||||||
|
BuildRequires: pkgconfig(libudev)
|
||||||
|
BuildRequires: pkgconfig(xkeyboard-config)
|
||||||
|
BuildRequires: kernel-headers
|
||||||
|
BuildRequires: libpng-devel
|
||||||
|
BuildRequires: libxslt, docbook-style-xsl
|
||||||
|
BuildRequires: pkgconfig(gtk+-3.0)
|
||||||
|
BuildRequires: pango-devel >= 1.21.0
|
||||||
|
BuildRequires: cairo-devel
|
||||||
|
BuildRequires: gettext-devel
|
||||||
|
BuildRequires: intltool
|
||||||
|
# for /usr/bin/systemd-tty-ask-password-agent
|
||||||
|
BuildRequires: systemd
|
||||||
|
# for _unitdir macro
|
||||||
|
BuildRequires: systemd-rpm-macros
|
||||||
|
|
||||||
|
Requires: %{name}-core-libs = %{version}-%{release}
|
||||||
|
Requires: %{name}-scripts = %{version}-%{release}
|
||||||
|
# For keyboard layouts
|
||||||
|
Requires: xkeyboard-config
|
||||||
|
Suggests: logrotate
|
||||||
|
|
||||||
|
%description
|
||||||
|
Plymouth provides an attractive graphical boot animation in
|
||||||
|
place of the text messages that normally get shown. Text
|
||||||
|
messages are instead redirected to a log file for viewing
|
||||||
|
after boot.
|
||||||
|
|
||||||
|
|
||||||
|
%package system-theme
|
||||||
|
Summary: Plymouth default theme
|
||||||
|
Requires: plymouth(system-theme) = %{version}-%{release}
|
||||||
|
|
||||||
|
%description system-theme
|
||||||
|
This meta-package tracks the current distribution default theme.
|
||||||
|
|
||||||
|
|
||||||
|
%package core-libs
|
||||||
|
Summary: Plymouth core libraries
|
||||||
|
|
||||||
|
%description core-libs
|
||||||
|
This package contains the core libraries used by Plymouth.
|
||||||
|
|
||||||
|
|
||||||
|
%package graphics-libs
|
||||||
|
Summary: Plymouth graphics libraries
|
||||||
|
Requires: %{name}-core-libs = %{version}-%{release}
|
||||||
|
Requires: system-logos
|
||||||
|
|
||||||
|
%description graphics-libs
|
||||||
|
This package contains the libraries used by graphical Plymouth splashes.
|
||||||
|
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Libraries and headers for writing Plymouth splash plugins
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-graphics-libs = %{version}-%{release}
|
||||||
|
Requires: pkgconfig
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
This package contains the libraries and headers needed to develop
|
||||||
|
3rd party splash plugins for Plymouth.
|
||||||
|
|
||||||
|
|
||||||
|
%package scripts
|
||||||
|
Summary: Plymouth related scripts
|
||||||
|
Requires: findutils, coreutils, gzip, cpio, dracut
|
||||||
|
Requires: xkeyboard-config
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description scripts
|
||||||
|
This package contains scripts that help integrate Plymouth with
|
||||||
|
the system.
|
||||||
|
|
||||||
|
|
||||||
|
%package plugin-label
|
||||||
|
Summary: Plymouth label plugin
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-graphics-libs = %{version}-%{release}
|
||||||
|
|
||||||
|
%description plugin-label
|
||||||
|
This package contains the label control plugin for Plymouth.
|
||||||
|
It provides the ability to render text on graphical boot splashes.
|
||||||
|
|
||||||
|
|
||||||
|
%package plugin-script
|
||||||
|
Summary: Plymouth "script" plugin
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-graphics-libs = %{version}-%{release}
|
||||||
|
|
||||||
|
%description plugin-script
|
||||||
|
This package contains the "script" boot splash plugin for
|
||||||
|
Plymouth. It features an extensible boot splash language that
|
||||||
|
allows writing new plugins as scripts, simplifying the process
|
||||||
|
of designing custom boot splash themes.
|
||||||
|
|
||||||
|
|
||||||
|
%package plugin-fade-throbber
|
||||||
|
Summary: Plymouth "Fade-Throbber" plugin
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-graphics-libs = %{version}-%{release}
|
||||||
|
|
||||||
|
%description plugin-fade-throbber
|
||||||
|
This package contains the "Fade-In" boot splash plugin for
|
||||||
|
Plymouth. It features a centered image that fades in and out
|
||||||
|
while other images pulsate around during system boot up.
|
||||||
|
|
||||||
|
|
||||||
|
%package plugin-space-flares
|
||||||
|
Summary: Plymouth "space-flares" plugin
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-graphics-libs = %{version}-%{release}
|
||||||
|
Requires: plymouth-plugin-label = %{version}-%{release}
|
||||||
|
|
||||||
|
%description plugin-space-flares
|
||||||
|
This package contains the "space-flares" boot splash plugin for
|
||||||
|
Plymouth. It features a corner image with animated flares.
|
||||||
|
|
||||||
|
|
||||||
|
%package plugin-two-step
|
||||||
|
Summary: Plymouth "two-step" plugin
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
Requires: %{name}-graphics-libs = %{version}-%{release}
|
||||||
|
Requires: plymouth-plugin-label = %{version}-%{release}
|
||||||
|
# Spinifinity like themes should now use two-step instead of throbgress
|
||||||
|
# No provides, the throbgress plugin has been removed upstream
|
||||||
|
Obsoletes: %{name}-plugin-throbgress < %{version}-%{release}
|
||||||
|
|
||||||
|
%description plugin-two-step
|
||||||
|
This package contains the "two-step" boot splash plugin for
|
||||||
|
Plymouth. It features a two phased boot process that starts with
|
||||||
|
a progressing animation synced to boot time and finishes with a
|
||||||
|
short, fast one-shot animation.
|
||||||
|
|
||||||
|
# Don't build charge theme in ELN/RHEL as it's Fedora specific
|
||||||
|
%if ! 0%{?rhel}
|
||||||
|
%package theme-charge
|
||||||
|
Summary: Plymouth "Charge" plugin
|
||||||
|
Requires: %{name}-plugin-two-step = %{version}-%{release}
|
||||||
|
Requires: fedora-logos-classic
|
||||||
|
Requires(post): plymouth-scripts
|
||||||
|
|
||||||
|
%description theme-charge
|
||||||
|
This package contains the "charge" boot splash theme for
|
||||||
|
Plymouth. It features the shadowy hull of a Fedora logo charge up and
|
||||||
|
and finally burst into full form.
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%package theme-fade-in
|
||||||
|
Summary: Plymouth "Fade-In" theme
|
||||||
|
Requires: %{name}-plugin-fade-throbber = %{version}-%{release}
|
||||||
|
Requires(post): plymouth-scripts
|
||||||
|
|
||||||
|
%description theme-fade-in
|
||||||
|
This package contains the "Fade-In" boot splash theme for
|
||||||
|
Plymouth. It features a centered logo that fades in and out
|
||||||
|
while stars twinkle around the logo during system boot up.
|
||||||
|
|
||||||
|
|
||||||
|
%package theme-script
|
||||||
|
Summary: Plymouth "Script" plugin
|
||||||
|
Requires: %{name}-plugin-script = %{version}-%{release}
|
||||||
|
Requires(post): plymouth-scripts
|
||||||
|
|
||||||
|
%description theme-script
|
||||||
|
This package contains the "script" boot splash theme for
|
||||||
|
Plymouth. It it is a simple example theme the uses the "script"
|
||||||
|
plugin.
|
||||||
|
|
||||||
|
|
||||||
|
%package theme-solar
|
||||||
|
Summary: Plymouth "Solar" theme
|
||||||
|
Requires: %{name}-plugin-space-flares = %{version}-%{release}
|
||||||
|
Requires(post): plymouth-scripts
|
||||||
|
|
||||||
|
%description theme-solar
|
||||||
|
This package contains the "Solar" boot splash theme for
|
||||||
|
Plymouth. It features a blue flamed sun with animated solar flares.
|
||||||
|
|
||||||
|
|
||||||
|
%package theme-spinfinity
|
||||||
|
Summary: Plymouth "Spinfinity" theme
|
||||||
|
Requires: %{name}-plugin-two-step = %{version}-%{release}
|
||||||
|
Requires(post): plymouth-scripts
|
||||||
|
|
||||||
|
%description theme-spinfinity
|
||||||
|
This package contains the "Spinfinity" boot splash theme for
|
||||||
|
Plymouth. It features a centered logo and animated spinner that
|
||||||
|
spins in the shape of an infinity sign.
|
||||||
|
|
||||||
|
|
||||||
|
%package theme-spinner
|
||||||
|
Summary: Plymouth "Spinner" theme
|
||||||
|
Requires: %{name}-plugin-two-step = %{version}-%{release}
|
||||||
|
%if 0%{?rhel} > 9
|
||||||
|
Requires: redhat-mono-vf-fonts
|
||||||
|
Requires: redhat-text-vf-fonts
|
||||||
|
%else
|
||||||
|
Requires: font(cantarell) font(cantarelllight)
|
||||||
|
%endif
|
||||||
|
Requires(post): plymouth-scripts
|
||||||
|
Provides: plymouth(system-theme) = %{version}-%{release}
|
||||||
|
|
||||||
|
%description theme-spinner
|
||||||
|
This package contains the "spinner" boot splash theme for
|
||||||
|
Plymouth. It features a small spinner on a dark background.
|
||||||
|
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1
|
||||||
|
# Change the default theme
|
||||||
|
sed -i -e 's/spinner/bgrt/g' src/plymouthd.defaults
|
||||||
|
|
||||||
|
%if 0%{?rhel} > 9
|
||||||
|
find -type f -exec sed -i -e 's/Cantarell/Red Hat Text/g' {} \;
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%build
|
||||||
|
%meson -Dtracing=true \
|
||||||
|
-Dlogo=%{_datadir}/pixmaps/system-logo-white.png \
|
||||||
|
-Dbackground-start-color-stop=0x0073B3 \
|
||||||
|
-Dbackground-end-color-stop=0x00457E \
|
||||||
|
-Dbackground-color=0x3391cd
|
||||||
|
%meson_build
|
||||||
|
|
||||||
|
%install
|
||||||
|
%meson_install
|
||||||
|
|
||||||
|
%find_lang %{name}
|
||||||
|
find $RPM_BUILD_ROOT -name '*.la' -delete
|
||||||
|
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/plymouth
|
||||||
|
|
||||||
|
%if ! 0%{?rhel}
|
||||||
|
# Add charge, our old default
|
||||||
|
mkdir -p $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge
|
||||||
|
cp %{SOURCE2} $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge
|
||||||
|
cp $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/glow/{box,bullet,entry,lock}.png $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/charge
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Drop glow, it's not very Fedora-y
|
||||||
|
rm -rf $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/glow
|
||||||
|
|
||||||
|
# add in the watermark to spinner and bgrt
|
||||||
|
(cd $RPM_BUILD_ROOT%{_datadir}/plymouth/themes/spinner; ln -sf ../../../pixmaps/fedora-gdm-logo.png watermark.png)
|
||||||
|
|
||||||
|
|
||||||
|
%ldconfig_scriptlets core-libs
|
||||||
|
|
||||||
|
%ldconfig_scriptlets graphics-libs
|
||||||
|
|
||||||
|
%if ! 0%{?rhel}
|
||||||
|
%postun theme-charge
|
||||||
|
export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "charge" ]; then
|
||||||
|
%{_sbindir}/plymouth-set-default-theme --reset
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%postun theme-fade-in
|
||||||
|
export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "fade-in" ]; then
|
||||||
|
%{_sbindir}/plymouth-set-default-theme --reset
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
%postun theme-solar
|
||||||
|
export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "solar" ]; then
|
||||||
|
%{_sbindir}/plymouth-set-default-theme --reset
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
%postun theme-spinfinity
|
||||||
|
export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "spinfinity" ]; then
|
||||||
|
%{_sbindir}/plymouth-set-default-theme --reset
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
%post theme-spinner
|
||||||
|
export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/
|
||||||
|
# On upgrades replace charge with the new bgrt default
|
||||||
|
if [ $1 -eq 2 ]; then
|
||||||
|
if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "charge" ]; then
|
||||||
|
%{_sbindir}/plymouth-set-default-theme bgrt
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
%postun theme-spinner
|
||||||
|
export PLYMOUTH_PLUGIN_PATH=%{_libdir}/plymouth/
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
if [ "$(%{_sbindir}/plymouth-set-default-theme)" == "bgrt" -o \
|
||||||
|
"$(%{_sbindir}/plymouth-set-default-theme)" == "spinner" ]; then
|
||||||
|
%{_sbindir}/plymouth-set-default-theme --reset
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
%files -f %{name}.lang
|
||||||
|
%license COPYING
|
||||||
|
%doc AUTHORS README.md
|
||||||
|
%dir %{_datadir}/plymouth
|
||||||
|
%dir %{_datadir}/plymouth/themes
|
||||||
|
%dir %{_datadir}/plymouth/themes/details
|
||||||
|
%dir %{_datadir}/plymouth/themes/text
|
||||||
|
%dir %{_libexecdir}/plymouth
|
||||||
|
%dir %{_localstatedir}/lib/plymouth
|
||||||
|
%dir %{_libdir}/plymouth/renderers
|
||||||
|
%dir %{_sysconfdir}/plymouth
|
||||||
|
%config(noreplace) %{_sysconfdir}/plymouth/plymouthd.conf
|
||||||
|
%config(noreplace) %{_sysconfdir}/logrotate.d/bootlog
|
||||||
|
%{_sbindir}/plymouthd
|
||||||
|
%{_libexecdir}/plymouth/plymouthd-fd-escrow
|
||||||
|
%{_bindir}/plymouth
|
||||||
|
%{_libdir}/plymouth/details.so
|
||||||
|
%{_libdir}/plymouth/text.so
|
||||||
|
%{_libdir}/plymouth/tribar.so
|
||||||
|
%{_datadir}/plymouth/themes/details/details.plymouth
|
||||||
|
%{_datadir}/plymouth/themes/text/text.plymouth
|
||||||
|
%{_datadir}/plymouth/themes/tribar/tribar.plymouth
|
||||||
|
%{_datadir}/plymouth/plymouthd.defaults
|
||||||
|
%{_localstatedir}/spool/plymouth
|
||||||
|
%{_mandir}/man?/*
|
||||||
|
%ghost %verify(not mode) %{_localstatedir}/lib/plymouth/boot-duration
|
||||||
|
%{_unitdir}/
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%{_libdir}/libply.so
|
||||||
|
%{_libdir}/libply-splash-core.so
|
||||||
|
%{_libdir}/libply-boot-client.so
|
||||||
|
%{_libdir}/libply-splash-graphics.so
|
||||||
|
%{_libdir}/pkgconfig/ply-splash-core.pc
|
||||||
|
%{_libdir}/pkgconfig/ply-splash-graphics.pc
|
||||||
|
%{_libdir}/pkgconfig/ply-boot-client.pc
|
||||||
|
%{_libdir}/plymouth/renderers/x11*
|
||||||
|
%{_includedir}/plymouth-1
|
||||||
|
|
||||||
|
%files core-libs
|
||||||
|
%{_libdir}/libply.so.*
|
||||||
|
%{_libdir}/libply-splash-core.so.*
|
||||||
|
%{_libdir}/libply-boot-client.so.*
|
||||||
|
%dir %{_libdir}/plymouth
|
||||||
|
|
||||||
|
%files graphics-libs
|
||||||
|
%{_libdir}/libply-splash-graphics.so.*
|
||||||
|
%{_libdir}/plymouth/renderers/drm*
|
||||||
|
%{_libdir}/plymouth/renderers/frame-buffer*
|
||||||
|
|
||||||
|
%files scripts
|
||||||
|
%{_sbindir}/plymouth-set-default-theme
|
||||||
|
%{_libexecdir}/plymouth/plymouth-update-initrd
|
||||||
|
%{_libexecdir}/plymouth/plymouth-generate-initrd
|
||||||
|
%{_libexecdir}/plymouth/plymouth-populate-initrd
|
||||||
|
|
||||||
|
%files plugin-label
|
||||||
|
%{_libdir}/plymouth/label-freetype.so
|
||||||
|
%{_libdir}/plymouth/label-pango.so
|
||||||
|
|
||||||
|
%files plugin-script
|
||||||
|
%{_libdir}/plymouth/script.so
|
||||||
|
|
||||||
|
%files plugin-fade-throbber
|
||||||
|
%{_libdir}/plymouth/fade-throbber.so
|
||||||
|
|
||||||
|
%files plugin-space-flares
|
||||||
|
%{_libdir}/plymouth/space-flares.so
|
||||||
|
|
||||||
|
%files plugin-two-step
|
||||||
|
%{_libdir}/plymouth/two-step.so
|
||||||
|
|
||||||
|
%if ! 0%{?rhel}
|
||||||
|
%files theme-charge
|
||||||
|
%{_datadir}/plymouth/themes/charge
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%files theme-fade-in
|
||||||
|
%{_datadir}/plymouth/themes/fade-in
|
||||||
|
|
||||||
|
%files theme-script
|
||||||
|
%{_datadir}/plymouth/themes/script
|
||||||
|
|
||||||
|
%files theme-solar
|
||||||
|
%{_datadir}/plymouth/themes/solar
|
||||||
|
|
||||||
|
%files theme-spinfinity
|
||||||
|
%{_datadir}/plymouth/themes/spinfinity
|
||||||
|
|
||||||
|
%files theme-spinner
|
||||||
|
# bgrt is a variant of spinner with different settings in its .plymouth file
|
||||||
|
%{_datadir}/plymouth/themes/bgrt
|
||||||
|
%{_datadir}/plymouth/themes/spinner
|
||||||
|
|
||||||
|
%files system-theme
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
%autochangelog
|
Loading…
Reference in New Issue
Block a user