[](https://github.com/pre-commit/pre-commit)
[](https://github.com/hartwork/grub2-theme-preview/actions/workflows/python_test_suite.yml)
# About
**grub2-theme-preview** came into life when I was looking around for
available GRUB 2.x themes and wanted a way to quickly see a theme
in action without rebooting real hardware.
It takes a theme folder (or just a single picture),
creates a temporary bootable image using `grub2-mkrescue` and launches
that image in a virtual machine using KVM/QEMU, all without root privileges.

(Showing theme [gutsblack-archlinux](https://forums.archlinux.fr/viewtopic.php?t=11361))
## Installation
To install the latest release from [PyPI](https://pypi.org/):
```console
# pip install --user grub2-theme-preview
```
To install from a Git clone _for development_:
```console
# pip install --user --editable .
```
Please make sure to install these _non-PyPI dependencies_ as well:
- `grub-mkrescue` of [GRUB 2](https://www.gnu.org/software/grub/) (package `grub-common` on Debian and Ubuntu)
- [QEMU](https://wiki.qemu.org/Main_Page) — _hypervisor that performs hardware virtualization_
- [OVMF](https://github.com/tianocore/tianocore.github.io/wiki/OVMF) — EFI bios image for use with QEMU
- [mtools](https://www.gnu.org/software/mtools/) — _collection of utilities to access MS-DOS_
- `xorriso` of [libisoburn](https://dev.lovelyhq.com/libburnia/libisoburn) — _frontend which enables creation and expansion of the ISO format_
## Usage
```console
# grub2-theme-preview --help
usage: grub2-theme-preview [-h] [--grub-cfg PATH] [--verbose]
[--resolution WxH] [--timeout SECONDS]
[--add TARGET=/SOURCE] [--version]
[--grub2-mkrescue COMMAND] [--qemu COMMAND]
[--xorriso COMMAND] [--no-kvm] [--debug]
[--plain-rescue-image]
PATH
positional arguments:
PATH path of theme directory (or PNG/TGA image file) to
preview
optional arguments:
-h, --help show this help message and exit
--grub-cfg PATH path of custom grub.cfg file to use (default:
/boot/grub{2,}/grub.cfg)
--verbose increase verbosity
--resolution WxH set a custom resolution, e.g. 800x600
--timeout SECONDS set GRUB timeout in whole seconds or -1 to disable
(default: 30 seconds)
--add TARGET=/SOURCE make grub2-mkrescue add file(s) from /SOURCE to
/TARGET in the rescue image (can be passed multiple
times)
--version show program's version number and exit
command location arguments:
--grub2-mkrescue COMMAND
grub2-mkrescue command (default: auto-detect)
--qemu COMMAND KVM/QEMU command (default: qemu-system-<machine>)
--xorriso COMMAND xorriso command (default: xorriso)
arguments related to invokation of QEMU/KVM:
--display DISPLAY pass "-display DISPLAY" to QEMU, see "man qemu" for
details (default: use QEMU's default display)
--full-screen pass "-full-screen" to QEMU
--no-kvm do not pass -enable-kvm to QEMU (and hence fall back
to acceleration "tcg" which is significantly slower
than KVM)
--vga CARD pass "-vga CARD" to QEMU, see "man qemu" for details
(default: use QEMU's default VGA card)
debugging arguments:
--debug enable debugging output
--plain-rescue-image use unprocessed GRUB rescue image with no theme
patched in; useful for checking if a plain GRUB rescue
image shows up a GRUB shell, successfully.
```
Raw data
{
"_id": null,
"home_page": "https://github.com/hartwork/grub2-theme-preview",
"name": "grub2-theme-preview",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "",
"author": "Sebastian Pipping",
"author_email": "sebastian@pipping.org",
"download_url": "https://files.pythonhosted.org/packages/42/8c/8c6cf7e847173ad2788c4ca28e1d76af55a25000634b9d8dc79c2735d44e/grub2-theme-preview-2.8.0.tar.gz",
"platform": null,
"description": "[](https://github.com/pre-commit/pre-commit)\n[](https://github.com/hartwork/grub2-theme-preview/actions/workflows/python_test_suite.yml)\n\n\n# About\n\n**grub2-theme-preview** came into life when I was looking around for\navailable GRUB 2.x themes and wanted a way to quickly see a theme\nin action without rebooting real hardware.\n\nIt takes a theme folder (or just a single picture),\ncreates a temporary bootable image using `grub2-mkrescue` and launches\nthat image in a virtual machine using KVM/QEMU, all without root privileges.\n\n\n\n(Showing theme [gutsblack-archlinux](https://forums.archlinux.fr/viewtopic.php?t=11361))\n\n\n## Installation\n\nTo install the latest release from [PyPI](https://pypi.org/):\n\n```console\n# pip install --user grub2-theme-preview\n```\n\nTo install from a Git clone _for development_:\n\n```console\n# pip install --user --editable .\n```\n\nPlease make sure to install these _non-PyPI dependencies_ as well:\n - `grub-mkrescue` of [GRUB 2](https://www.gnu.org/software/grub/) (package `grub-common` on Debian and Ubuntu)\n - [QEMU](https://wiki.qemu.org/Main_Page) \u2014 _hypervisor that performs hardware virtualization_\n - [OVMF](https://github.com/tianocore/tianocore.github.io/wiki/OVMF) \u2014 EFI bios image for use with QEMU\n - [mtools](https://www.gnu.org/software/mtools/) \u2014 _collection of utilities to access MS-DOS_\n - `xorriso` of [libisoburn](https://dev.lovelyhq.com/libburnia/libisoburn) \u2014 _frontend which enables creation and expansion of the ISO format_\n\n\n## Usage\n\n```console\n# grub2-theme-preview --help\nusage: grub2-theme-preview [-h] [--grub-cfg PATH] [--verbose]\n [--resolution WxH] [--timeout SECONDS]\n [--add TARGET=/SOURCE] [--version]\n [--grub2-mkrescue COMMAND] [--qemu COMMAND]\n [--xorriso COMMAND] [--no-kvm] [--debug]\n [--plain-rescue-image]\n PATH\n\npositional arguments:\n PATH path of theme directory (or PNG/TGA image file) to\n preview\n\noptional arguments:\n -h, --help show this help message and exit\n --grub-cfg PATH path of custom grub.cfg file to use (default:\n /boot/grub{2,}/grub.cfg)\n --verbose increase verbosity\n --resolution WxH set a custom resolution, e.g. 800x600\n --timeout SECONDS set GRUB timeout in whole seconds or -1 to disable\n (default: 30 seconds)\n --add TARGET=/SOURCE make grub2-mkrescue add file(s) from /SOURCE to\n /TARGET in the rescue image (can be passed multiple\n times)\n --version show program's version number and exit\n\ncommand location arguments:\n --grub2-mkrescue COMMAND\n grub2-mkrescue command (default: auto-detect)\n --qemu COMMAND KVM/QEMU command (default: qemu-system-<machine>)\n --xorriso COMMAND xorriso command (default: xorriso)\n\narguments related to invokation of QEMU/KVM:\n --display DISPLAY pass \"-display DISPLAY\" to QEMU, see \"man qemu\" for\n details (default: use QEMU's default display)\n --full-screen pass \"-full-screen\" to QEMU\n --no-kvm do not pass -enable-kvm to QEMU (and hence fall back\n to acceleration \"tcg\" which is significantly slower\n than KVM)\n --vga CARD pass \"-vga CARD\" to QEMU, see \"man qemu\" for details\n (default: use QEMU's default VGA card)\n\ndebugging arguments:\n --debug enable debugging output\n --plain-rescue-image use unprocessed GRUB rescue image with no theme\n patched in; useful for checking if a plain GRUB rescue\n image shows up a GRUB shell, successfully.\n```\n",
"bugtrack_url": null,
"license": "GPL v2 or later",
"summary": "Preview a GRUB 2.x theme using KVM/QEMU",
"version": "2.8.0",
"project_urls": {
"Download": "https://github.com/hartwork/grub2-theme-preview/archive/2.8.0.tar.gz",
"Homepage": "https://github.com/hartwork/grub2-theme-preview"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "05e4dd00114e0675178c0aded7a64f83312f70353a09b1cfc61b71bf464bd50d",
"md5": "69610d338c32b1fd4886377543ea92d6",
"sha256": "6557f6e73c35266767848b35a552773b47bbb0b953081334b7bf3f2408617f66"
},
"downloads": -1,
"filename": "grub2_theme_preview-2.8.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "69610d338c32b1fd4886377543ea92d6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 12105,
"upload_time": "2023-05-10T11:37:10",
"upload_time_iso_8601": "2023-05-10T11:37:10.930804Z",
"url": "https://files.pythonhosted.org/packages/05/e4/dd00114e0675178c0aded7a64f83312f70353a09b1cfc61b71bf464bd50d/grub2_theme_preview-2.8.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "428c8c6cf7e847173ad2788c4ca28e1d76af55a25000634b9d8dc79c2735d44e",
"md5": "8f4e1625275027f891fa77f53225a5f0",
"sha256": "cdf8b164ced79d9ae5efb096e720e52e236d486745fbcb5dc1aa7ad341284b5a"
},
"downloads": -1,
"filename": "grub2-theme-preview-2.8.0.tar.gz",
"has_sig": false,
"md5_digest": "8f4e1625275027f891fa77f53225a5f0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 207671,
"upload_time": "2023-05-10T11:37:13",
"upload_time_iso_8601": "2023-05-10T11:37:13.595569Z",
"url": "https://files.pythonhosted.org/packages/42/8c/8c6cf7e847173ad2788c4ca28e1d76af55a25000634b9d8dc79c2735d44e/grub2-theme-preview-2.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-10 11:37:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hartwork",
"github_project": "grub2-theme-preview",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "grub2-theme-preview"
}