diff --git printing/printing_context_linux.cc printing/printing_context_linux.cc
index ab6cda8e54b37..164b3ef67445a 100644
--- printing/printing_context_linux.cc
+++ printing/printing_context_linux.cc
@@ -73,11 +73,11 @@ mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
   ResetSettings();
 
 #if BUILDFLAG(IS_LINUX)
-  if (!ui::LinuxUi::instance())
+  if (!ui::PrintingContextLinuxDelegate::instance())
     return mojom::ResultCode::kSuccess;
 
   if (!print_dialog_)
-    print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
+    print_dialog_ = ui::PrintingContextLinuxDelegate::instance()->CreatePrintDialog(this);
 
   if (print_dialog_) {
     print_dialog_->UseDefaultSettings();
@@ -89,8 +89,8 @@ mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
 
 gfx::Size PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
 #if BUILDFLAG(IS_LINUX)
-  if (ui::LinuxUi::instance())
-    return ui::LinuxUi::instance()->GetPdfPaperSize(this);
+  if (ui::PrintingContextLinuxDelegate::instance())
+    return ui::PrintingContextLinuxDelegate::instance()->GetPdfPaperSize(this);
 #endif
 
   return gfx::Size();
@@ -102,11 +102,11 @@ mojom::ResultCode PrintingContextLinux::UpdatePrinterSettings(
   DCHECK(!in_print_job_);
 
 #if BUILDFLAG(IS_LINUX)
-  if (!ui::LinuxUi::instance())
+  if (!ui::PrintingContextLinuxDelegate::instance())
     return mojom::ResultCode::kSuccess;
 
   if (!print_dialog_)
-    print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
+    print_dialog_ = ui::PrintingContextLinuxDelegate::instance()->CreatePrintDialog(this);
 
   if (print_dialog_) {
     // PrintDialogGtk::UpdateSettings() calls InitWithSettings() so settings_ will
diff --git ui/linux/linux_ui.cc ui/linux/linux_ui.cc
index 29db798e8b171..f8b9546b90321 100644
--- ui/linux/linux_ui.cc
+++ ui/linux/linux_ui.cc
@@ -18,11 +18,29 @@ namespace ui {
 namespace {
 
 LinuxUi* g_linux_ui = nullptr;
+static PrintingContextLinuxDelegate* g_delegate = nullptr;
 
 }  // namespace
 
+// static
+PrintingContextLinuxDelegate* PrintingContextLinuxDelegate::SetInstance(
+    PrintingContextLinuxDelegate* delegate) {
+  auto old_delegate = g_delegate;
+  g_delegate = delegate;
+  return old_delegate;
+}
+
+// static
+PrintingContextLinuxDelegate* PrintingContextLinuxDelegate::instance() {
+  return g_delegate;
+}
+
 // static
 LinuxUi* LinuxUi::SetInstance(LinuxUi* instance) {
+#if BUILDFLAG(IS_LINUX) && BUILDFLAG(ENABLE_PRINTING)
+  PrintingContextLinuxDelegate::SetInstance(instance);
+#endif
+
   return std::exchange(g_linux_ui, instance);
 }
 
diff --git ui/linux/linux_ui.h ui/linux/linux_ui.h
index a47134d7fa672..4fef62bbec3ee 100644
--- ui/linux/linux_ui.h
+++ ui/linux/linux_ui.h
@@ -19,6 +19,10 @@
 #include "printing/buildflags/buildflags.h"
 #include "ui/gfx/geometry/rect.h"
 
+#if BUILDFLAG(ENABLE_PRINTING)
+#include "printing/printing_context_linux.h"  // nogncheck
+#endif
+
 // The main entrypoint into Linux toolkit specific code. GTK/QT code should only
 // be executed behind this interface.
 
@@ -92,9 +96,27 @@ inline DisplayConfig::DisplayConfig(DisplayConfig&& other) = default;
 inline DisplayConfig& DisplayConfig::operator=(DisplayConfig&& other) = default;
 inline DisplayConfig::~DisplayConfig() = default;
 
+class COMPONENT_EXPORT(LINUX_UI) PrintingContextLinuxDelegate {
+ public:
+  virtual ~PrintingContextLinuxDelegate() = default;
+
+  virtual printing::PrintDialogLinuxInterface* CreatePrintDialog(
+      printing::PrintingContextLinux* context) = 0;
+
+  virtual gfx::Size GetPdfPaperSize(printing::PrintingContextLinux* context) = 0;
+
+  static PrintingContextLinuxDelegate* SetInstance(
+      PrintingContextLinuxDelegate* delegate);
+  static PrintingContextLinuxDelegate* instance();
+};
+
 // Adapter class with targets to render like different toolkits. Set by any
 // project that wants to do linux desktop native rendering.
-class COMPONENT_EXPORT(LINUX_UI) LinuxUi {
+class COMPONENT_EXPORT(LINUX_UI) LinuxUi
+#if BUILDFLAG(ENABLE_PRINTING)
+    : public PrintingContextLinuxDelegate
+#endif
+ {
  public:
   // Describes the window management actions that could be taken in response to
   // a middle click in the non client area.
@@ -161,14 +183,6 @@ class COMPONENT_EXPORT(LINUX_UI) LinuxUi {
   // Returns a map of KeyboardEvent code to KeyboardEvent key values.
   virtual base::flat_map<std::string, std::string> GetKeyboardLayoutMap() = 0;
 
-#if BUILDFLAG(ENABLE_PRINTING)
-  virtual printing::PrintDialogLinuxInterface* CreatePrintDialog(
-      printing::PrintingContextLinux* context) = 0;
-
-  virtual gfx::Size GetPdfPaperSize(
-      printing::PrintingContextLinux* context) = 0;
-#endif
-
   // Returns a native file selection dialog.  `listener` is of type
   // SelectFileDialog::Listener.  TODO(thomasanderson): Move
   // SelectFileDialog::Listener to SelectFileDialogListener so that it can be
