diff --git a/Makefile b/Makefile index 4df45f9..025dbdb 100755 --- a/Makefile +++ b/Makefile @@ -10,6 +10,23 @@ all: # Slideshow (cd lubuntu/branding/lubuntu/lang/ && make) (cd ubuntustudio/branding/ubuntustudio/lang && make) + # basicwallpaper + (cd common/basicwallpaper && mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release && make) + # Lubuntu OEM setup stuff + (cd lubuntu && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc && mkdir -p usr/share/applications) + (cp lubuntu/calamares-logs-helper lubuntu/oemconfig/usr/bin/) + (cp lubuntu/oem/sddm.conf lubuntu/oemconfig/etc/) + (cp lubuntu/oem/sudoers.oem lubuntu/oemconfig/etc/ && chmod 400 lubuntu/oemconfig/etc/sudoers.oem) + (cp lubuntu/oem/calamares-oemfinish.sh lubuntu/oemconfig/usr/libexec/) + (cp lubuntu/oem/calamares-finish-oem lubuntu/oemconfig/usr/bin/) + (cp lubuntu/oem/calamares-finish-oem.desktop lubuntu/oemconfig/usr/share/applications/) + (cp -r lubuntu/branding lubuntu/oemconfig/etc/calamares/) + (cp -r lubuntu/oem/modules/ lubuntu/oemconfig/etc/calamares/) + (cp lubuntu/oem/settings.conf lubuntu/oemconfig/etc/calamares/) + (cp lubuntu/oem/lubuntu-oem-env/lubuntu-oem-environment.desktop lubuntu/oemconfig/usr/share/xsessions/) + (cp lubuntu/oem/lubuntu-oem-env/start-lubuntu-oem-env lubuntu/oemconfig/usr/libexec/) + (cp common/basicwallpaper/build/basicwallpaper lubuntu/oemconfig/usr/bin/) + (fakeroot bash -c "chown -R root:root lubuntu/oemconfig && tar cvzf lubuntu/oemconfig.tar.gz lubuntu/oemconfig") # Kubuntu OEM setup stuff (cd kubuntu && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc && mkdir -p usr/share/applications) (cp kubuntu/calamares-logs-helper kubuntu/oemconfig/usr/bin/) @@ -23,6 +40,7 @@ all: (cp kubuntu/oem/settings.conf kubuntu/oemconfig/etc/calamares/) (cp kubuntu/oem/kubuntu-oem-env/kubuntu-oem-environment.desktop kubuntu/oemconfig/usr/share/xsessions/) (cp kubuntu/oem/kubuntu-oem-env/start-kubuntu-oem-env kubuntu/oemconfig/usr/libexec/) + (cp common/basicwallpaper/build/basicwallpaper kubuntu/oemconfig/usr/bin/) (fakeroot bash -c "chown -R root:root kubuntu/oemconfig && tar cvzf kubuntu/oemconfig.tar.gz kubuntu/oemconfig") # Get rid of the unnecessary files find lubuntu/ -type f -iname "*.in" | xargs rm -f @@ -32,4 +50,6 @@ all: find kubuntu/ -type f -iname "*.in" | xargs rm -f find kubuntu/ -type f -iname "Makefile" | xargs rm -f rm -rf kubuntu/oemconfig + rm -rf lubuntu/oemconfig + rm -rf common/basicwallpaper/build # vim:ts=4 diff --git a/common/basicwallpaper/CMakeLists.txt b/common/basicwallpaper/CMakeLists.txt new file mode 100644 index 0000000..a736850 --- /dev/null +++ b/common/basicwallpaper/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.5) + +project(basicwallpaper VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED) + +set(PROJECT_SOURCES + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui +) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(basicwallpaper + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ) +else() + add_executable(basicwallpaper + ${PROJECT_SOURCES} + ) +endif() + +target_link_libraries(basicwallpaper PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) + +install(TARGETS basicwallpaper + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(basicwallpaper) +endif() diff --git a/common/basicwallpaper/CMakeLists.txt.user b/common/basicwallpaper/CMakeLists.txt.user new file mode 100644 index 0000000..4dadf67 --- /dev/null +++ b/common/basicwallpaper/CMakeLists.txt.user @@ -0,0 +1,288 @@ + + + + + + EnvironmentId + {c72e8e96-4d64-44b5-94c8-e16820d11b4b} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + Desktop + {c8b6ccbc-b12c-473e-83be-23a4b6d2eb6e} + 0 + 0 + 0 + + Debug + -GUnix Makefiles +-DCMAKE_BUILD_TYPE:STRING=Debug +-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + /home/arraybolt3/Projects/build-basicwallpaper-Desktop-Debug + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + Release + -GUnix Makefiles +-DCMAKE_BUILD_TYPE:STRING=Release +-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + /home/arraybolt3/Projects/build-basicwallpaper-Desktop-Release + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + + + RelWithDebInfo + -GUnix Makefiles +-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo +-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + /home/arraybolt3/Projects/build-basicwallpaper-Desktop-RelWithDebInfo + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + MinSizeRel + -GUnix Makefiles +-DCMAKE_BUILD_TYPE:STRING=MinSizeRel +-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake +-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} +-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} +-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} +-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + /home/arraybolt3/Projects/build-basicwallpaper-Desktop-MinSizeRel + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 4 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + ProjectExplorer.CustomExecutableRunConfiguration + + false + true + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/common/basicwallpaper/README.md b/common/basicwallpaper/README.md new file mode 100644 index 0000000..753a8cd --- /dev/null +++ b/common/basicwallpaper/README.md @@ -0,0 +1,3 @@ +# basicwallpaper: Shows an image in the background across all screens + +Copyright (C) 2024 Kubuntu Developers . Licensed under the GNU GPL version 3. This license applies to all files in the repository. Inspiration taken from lubuntu-installer-prompt and pcmanfm-qt. diff --git a/common/basicwallpaper/main.cpp b/common/basicwallpaper/main.cpp new file mode 100644 index 0000000..6cb543b --- /dev/null +++ b/common/basicwallpaper/main.cpp @@ -0,0 +1,28 @@ +#include "mainwindow.h" + +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + QString wallpaperFile; + + if (argc > 1) { + wallpaperFile = QString(argv[1]); + } else { + return 1; + } + + for (QScreen *screen : QApplication::screens()) { + MainWindow *w = new MainWindow(wallpaperFile); + w->setWindowFlags(Qt::WindowStaysOnBottomHint); + w->setGeometry(screen->geometry()); + w->showFullScreen(); + w->show(); + w->applyWallpaper(); + } + + return a.exec(); +} diff --git a/common/basicwallpaper/mainwindow.cpp b/common/basicwallpaper/mainwindow.cpp new file mode 100644 index 0000000..80aef87 --- /dev/null +++ b/common/basicwallpaper/mainwindow.cpp @@ -0,0 +1,43 @@ +#include "mainwindow.h" +#include "./ui_mainwindow.h" + +#include +#include + +MainWindow::MainWindow(const QString &wallpaperFile, QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + m_wallpaperFile = wallpaperFile; +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::applyWallpaper() +{ + QImage image(m_wallpaperFile); + if (!image.isNull()) { + qreal imgRatio = static_cast(image.width()) / image.height(); + qreal screenRatio = static_cast(this->width()) / this->height(); + QImage scaled; + if (imgRatio < screenRatio) { + scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation); + int yGap = (scaled.height() - this->height()) / 2; + scaled = scaled.copy(0, yGap, scaled.width(), this->height()); + } else { + scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation); + int xGap = (scaled.width() - this->width()) / 2; + scaled = scaled.copy(xGap, 0, this->width(), scaled.height()); + } + QPixmap bg = QPixmap::fromImage(scaled); + QPalette palette; + palette.setBrush(QPalette::Window, bg); + this->setPalette(palette); + } else { + qCritical() << "ERROR: Wallpaper does not exist!"; + } +} diff --git a/common/basicwallpaper/mainwindow.h b/common/basicwallpaper/mainwindow.h new file mode 100644 index 0000000..01e4188 --- /dev/null +++ b/common/basicwallpaper/mainwindow.h @@ -0,0 +1,24 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(const QString &wallpaperFile, QWidget *parent = nullptr); + ~MainWindow(); + + void applyWallpaper(); + +private: + Ui::MainWindow *ui; + QString m_wallpaperFile; +}; +#endif // MAINWINDOW_H diff --git a/common/basicwallpaper/mainwindow.ui b/common/basicwallpaper/mainwindow.ui new file mode 100644 index 0000000..b232854 --- /dev/null +++ b/common/basicwallpaper/mainwindow.ui @@ -0,0 +1,22 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + diff --git a/debian/calamares-settings-kubuntu.lintian-overrides b/debian/calamares-settings-kubuntu.lintian-overrides index 62cb493..846ded7 100644 --- a/debian/calamares-settings-kubuntu.lintian-overrides +++ b/debian/calamares-settings-kubuntu.lintian-overrides @@ -1,5 +1,7 @@ -# there will be no manpage in the foreseeable future -calamares-settings-kubuntu: no-manual-page [usr/bin/calamares-logs-helper] +# sudo will always be present in the target system +calamares-settings-kubuntu: desktop-command-not-in-package sudo * +# there will be no manpage for any of this in the foreseeable future +calamares-settings-kubuntu: no-manual-page * # We're just extracting a log file and preserving it for the user to look at # after the installation, this is normal. calamares-settings-kubuntu: uses-dpkg-database-directly [usr/bin/calamares-logs-helper] diff --git a/debian/calamares-settings-lubuntu.install b/debian/calamares-settings-lubuntu.install index 5fdb0df..1910d22 100644 --- a/debian/calamares-settings-lubuntu.install +++ b/debian/calamares-settings-lubuntu.install @@ -1,7 +1,12 @@ common/modules/pkgselect/pkgselect.qml etc/calamares/branding/lubuntu/ lubuntu/branding/ etc/calamares/ lubuntu/calamares-logs-helper usr/bin/ +lubuntu/calamares-launch-normal usr/bin/ lubuntu/lubuntu-calamares.desktop usr/share/applications/ lubuntu/lubuntu-installer.svg usr/share/icons/hicolor/scalable/apps/ lubuntu/modules/ etc/calamares/ lubuntu/settings.conf etc/calamares/ +lubuntu/oem/calamares-launch-oem usr/bin/ +lubuntu/oem/calamares-launch-oem.desktop usr/share/applications/ +lubuntu/oem/calamares-oemprep.sh usr/libexec/ +lubuntu/oemconfig.tar.gz etc/calamares/ diff --git a/debian/calamares-settings-lubuntu.lintian-overrides b/debian/calamares-settings-lubuntu.lintian-overrides index 61667e4..53a5115 100644 --- a/debian/calamares-settings-lubuntu.lintian-overrides +++ b/debian/calamares-settings-lubuntu.lintian-overrides @@ -1,8 +1,7 @@ -# The .desktop file uses sudo to run the installer. sudo is included in the -# system. -desktop-command-not-in-package lxqt-sudo [usr/share/applications/lubuntu-calamares.desktop] -# there will be no manpage in the foreseeable future -calamares-settings-lubuntu: no-manual-page [usr/bin/calamares-logs-helper] +# sudo will always exist in the target system +calamares-settings-lubuntu: desktop-command-not-in-package sudo * +# there will be no manpage for any of this in the foreseeable future +calamares-settings-lubuntu: no-manual-page * # We're just extracting a log file and preserving it for the user to look at # after the installation, this is normal. calamares-settings-lubuntu: uses-dpkg-database-directly [usr/bin/calamares-logs-helper] diff --git a/debian/changelog b/debian/changelog index 9b81761..a21d9cb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,15 @@ +calamares-settings-ubuntu (1:24.04.15) noble; urgency=medium + + * Add Lubuntu OEM config. + * Fix a bug that could interfere with autologin setup during first-run + configuration after an OEM install. + * Add a simple wallpaper display engine for the first-run configuration + wizard. + * Don't run kdialog as root. + * Make OEM file cleanup more thorough. + + -- Aaron Rainbolt Wed, 14 Feb 2024 12:11:34 -0600 + calamares-settings-ubuntu (1:24.04.14) noble; urgency=medium * Add Kubuntu OEM config. diff --git a/debian/control b/debian/control index 9bb306f..1bb0db8 100644 --- a/debian/control +++ b/debian/control @@ -35,7 +35,6 @@ Description: Kubuntu Calamares Settings and Branding Package: calamares-settings-lubuntu Architecture: all Depends: calamares-settings-ubuntu-common (>= ${binary:Version}), - lubuntu-installer-prompt (>= 1.1.1), ${misc:Depends} Recommends: lubuntu-installer-prompt Conflicts: calamares-settings-ubuntustudio, calamares-settings-kubuntu @@ -49,12 +48,14 @@ Package: calamares-settings-ubuntu-common Architecture: any Depends: calamares (>= 3.2.14~), cryptsetup, + kdialog, keyutils, python3, python3-distro, qml-module-qtquick-window2, qml-module-qtquick2, squashfs-tools, + sudo, ${misc:Depends}, ${shlibs:Depends} Description: Common Calamares Settings diff --git a/debian/rules b/debian/rules index 36cfc41..6e7a079 100755 --- a/debian/rules +++ b/debian/rules @@ -11,14 +11,14 @@ MODULES_DIR = "debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIA dh $@ override_dh_auto_configure: - cd $(PKGSELECT) && mkdir build && cd build && cmake .. + (cd $(PKGSELECT) && mkdir build && cd build && cmake ..) override_dh_auto_build: make; - cd $(PKGSELECT)/build && $(MAKE) + (cd $(PKGSELECT)/build && $(MAKE)) override_dh_auto_install: - cd $(PKGSELECT)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install + (cd $(PKGSELECT)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install) override_dh_missing: dh_missing diff --git a/kubuntu/oem/calamares-finish-oem b/kubuntu/oem/calamares-finish-oem index 8dd2424..f8140e7 100755 --- a/kubuntu/oem/calamares-finish-oem +++ b/kubuntu/oem/calamares-finish-oem @@ -9,5 +9,13 @@ EOL )"; if kdialog --warningyesno "${msg}"; then - sed -i "s/Session=plasma/Session=kubuntu-oem-environment/" /etc/sddm.conf + sddm_file="$(cat <