A modern Qt6/QML GUI application for managing Btrfs/Snapper filesystem snapshots on Linux.
qSnapper is a graphical user interface for the Snapper snapshot management tool. It provides an intuitive way to create, browse, and manage filesystem snapshots on Btrfs and other supported filesystems.
- Snapshot Management:
Create, view, and delete filesystem snapshots - Snapshot Types:
Support for Single, Pre, and Post snapshots - Cleanup Policies:
Configure automatic cleanup using Number or Timeline algorithms - File Comparison:
View changes between snapshots with detailed diff preview - Restore Preview:
Preview files before restoring from snapshots - Theme Support:
Light/Dark mode switching - Internationalization:
Multi-language support (English, Japanese) - Modern UI:
Built with Qt6 Quick/QML for a responsive user experience - Secure Operations:
Uses D-Bus and PolicyKit for privilege escalation
The main window displays all available snapshots with detailed information including snapshot number, type, timestamp, and description.
Create new snapshots with customizable options including snapshot type (Single/Pre/Post),
description, and cleanup algorithm.
View detailed information about a specific snapshot,
including file changes, metadata, and available actions.
Preview file changes before restoring from a snapshot.
This helps you understand what will be modified.
Confirm snapshot deletion with a safety dialog that shows which snapshot will be removed.
- Linux operating system (required)
- Qt6 (>= 6.2)
- Qt6 Core
- Qt6 GUI
- Qt6 Quick
- Qt6 QuickControls2
- Qt6 Qml
- Qt6 DBus
- Snapper (>= 0.8.0)
- PolicyKit (polkit)
- D-Bus
- CMake (>= 3.16)
- C++17 compatible compiler (GCC, Clang)
- Qt6 development packages
- PolicyKit-Qt6 development files
- Snapper development headers
openSUSE Leap 16 / SUSE Linux Enterprise 16
sudo zypper install cmake gcc-c++ \
qt6-base-devel qt6-declarative-devel qt6-quickcontrols2-devel qt6-linguist-devel \
polkit-devel libpolkit-qt6-1-devel \
libsnapper-develRHEL 9 / 10
sudo dnf install cmake gcc-c++ \
qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtquickcontrols2-devel qt6-linguist-devel \
polkit-devel polkit-qt6-1-devel \
snapper-develgit clone https://github.com/presire/qSnapper.git
cd qSnapper
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make -j$(nproc)
sudo make installBuild Options:
-
SELinux Support (Optional, disabled by default):
cmake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_SELINUX=ON ..
Enables SELinux Mandatory Access Control (MAC) policy module installation.
Requirements for SELinux:
- openSUSE / SUSE Linux Enterprise:
sudo zypper install selinux-policy-devel policycoreutils
- RHEL 9 / 10:
sudo dnf install selinux-policy-devel policycoreutils-python-utils
See selinux/README.md for detailed SELinux configuration.
- openSUSE / SUSE Linux Enterprise:
-
Log Directory (Optional, default:
/var/log/qsnapper):cmake -DCMAKE_INSTALL_PREFIX=/usr -DQSNAPPER_LOG_DIR=/path/to/log/dir ..
Changes the directory where the D-Bus service writes log files. The log filename (
qsnapper-dbus.log) cannot be changed. If not specified, logs are written to/var/log/qsnapper.
The installation process automatically installs:
- D-Bus service files to
/usr/share/dbus-1/system-services/ - D-Bus configuration to
/usr/share/dbus-1/system.d/ - PolicyKit policy to
/usr/share/polkit-1/actions/ - Desktop entry to
/usr/share/applications/ - Application icon to
/usr/share/icons/hicolor/128x128/apps/
Reload D-Bus and PolicyKit:
sudo systemctl reload dbusYou can launch qSnapper from:
- Application menu (System Tools category)
- Command line:
qsnapper
- Click the "Create Snapshot" button
- Select snapshot type (Single, Pre, or Post)
- Enter a description
- Choose cleanup algorithm (optional)
- Click "Create"
The main window displays a list of all snapshots with:
- Snapshot number
- Type (Single, Pre, Post)
- Date and time
- User who created it
- Description
Select a snapshot to view:
- Files that were added, modified, or deleted
- Detailed file differences
- Select a snapshot
- Click "Restore" or "Preview Changes"
- Review the changes that will be made
- Confirm the restoration
Warning:
Restoring snapshots may overwrite current data. Always review changes before confirming.
qSnapper uses your existing Snapper configuration.
To configure Snapper for your root filesystem:
sudo snapper -c root create-config /For other filesystems:
sudo snapper -c <config-name> create-config <mount-point>Application settings are stored in:
~/.config/Presire/qSnapper.conf
Settings include:
- Theme mode (Light or Dark)
- Window geometry and state
- User preferences
qSnapper supports theme switching through the built-in ThemeManager:
- Light Mode:
Optimized light color scheme with Material Design colors - Dark Mode:
Comfortable dark color scheme for low-light environments
The theme setting is automatically persisted in the application configuration and can be toggled through the UI.
If you see D-Bus connection errors:
-
Check if the D-Bus service file is installed:
ls /usr/share/dbus-1/system-services/com.presire.qsnapper.Operations.service
-
Verify D-Bus configuration:
ls /usr/share/dbus-1/system.d/com.presire.qsnapper.Operations.conf
-
Check D-Bus service status:
systemctl status dbus
If operations fail with permission errors:
-
Verify PolicyKit policy is installed:
ls /usr/share/polkit-1/actions/com.presire.qsnapper.policy
-
Ensure your user is in the required groups (implementation-specific)
If Snapper is not configured:
s
sudo snapper list-configsIf no configurations exist, create one as shown in the Configuration section.
mkdir build-debug && cd build-debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make -j$(nproc)qSnapper/
├── CMakeLists.txt # Build configuration
├── src/ # C++ source files
│ ├── main.cpp # Application entry point
│ ├── fssnapshot.cpp # Snapshot data model
│ ├── snapperservice.cpp # Snapper service interface
│ ├── snapshotlistmodel.cpp # Snapshot list model
│ ├── filechangemodel.cpp # File change tree model
│ ├── thememanager.cpp # Theme management (Light/Dark mode)
│ └── dbusservice/ # D-Bus service implementation
│ ├── main.cpp # D-Bus service entry point
│ └── snapshotoperations.cpp # D-Bus method implementations
├── include/ # Header files
├── qml/ # QML user interface
│ ├── Main.qml # Main window with theme support
│ ├── pages/ # Page components
│ │ └── SnapshotListPage.qml
│ └── components/ # Reusable components
│ ├── SnapshotItem.qml
│ ├── SnapshotDetailDialog.qml
│ ├── RestorePreviewDialog.qml
│ ├── AboutqSnapperDialog.qml
│ └── AboutQtDialog.qml
├── icons/ # Application icons
├── dbus/ # D-Bus configuration files
├── polkit/ # PolicyKit policy files
└── translations/ # Translation files
└── qsnapper_ja.ts # Japanese translation
Contributions are welcome! Please feel free to submit issues and pull requests.
- Follow the existing code style
- Test your changes thoroughly
- Update documentation as needed
- Ensure all commits are signed
This project is licensed under the GNU General Public License v3.0 or later - see the LICENSE.md file for details.
- Snapper - The snapshot management tool
- Qt Project - The cross-platform framework
- PolicyKit - Authorization framework
- GitHub Repository: https://github.com/presire/qSnapper
- Issue Tracker: https://github.com/presire/qSnapper/issues
- Snapper Documentation: http://snapper.io/documentation.html
Presire
- GitHub: @presire




