From a68a1d3b916c7c4e63e8a42b3d111226be88ede9 Mon Sep 17 00:00:00 2001 From: Alfredo Monclus Date: Fri, 7 Jun 2024 09:50:49 -0300 Subject: [PATCH] docs update --- README.md | 50 ++++++++-------- docs/FAQ.md | 44 ++++++++++---- docs/Hardware.md | 22 +++---- docs/Installation.md | 87 +++++++++++++--------------- docs/Troubleshooting/Last_resort.md | 35 +++++------ docs/Troubleshooting/Network.md | 4 +- docs/img/LDO-LOGO_SQ.png | Bin 5900 -> 0 bytes docs/img/LDO-LOGO_SQ.svg | 32 ---------- docs/img/sponsors/LDO.png | Bin 0 -> 7225 bytes docs/img/sponsors/YUMI.png | Bin 0 -> 6599 bytes docs/index.md | 5 +- 11 files changed, 133 insertions(+), 146 deletions(-) delete mode 100644 docs/img/LDO-LOGO_SQ.png delete mode 100644 docs/img/LDO-LOGO_SQ.svg create mode 100644 docs/img/sponsors/LDO.png create mode 100644 docs/img/sponsors/YUMI.png diff --git a/README.md b/README.md index f11aa924..94670e75 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,54 @@ +Sure, here's an improved version of your text: + # KlipperScreen -KlipperScreen is a touchscreen GUI that interfaces with [Klipper](https://github.com/Klipper3d/klipper) via [Moonraker](https://github.com/arksine/moonraker). It can switch between multiple printers to access them from a single location, and it doesn't even need to run on the same host, you can install it on another device and configure the IP address to access the printer. +KlipperScreen is a touchscreen GUI that interfaces with [Klipper](https://github.com/Klipper3d/klipper) via [Moonraker](https://github.com/arksine/moonraker). It allows you to switch between multiple printers and access them from a single location. Notably, it doesn't need to run on the same host as your printer; you can install it on another device and configure the IP address to connect to the printer. ### Documentation -[Click here to access the documentation.](https://klipperscreen.github.io/KlipperScreen/) +For detailed information, [click here to access the documentation](https://klipperscreen.github.io/KlipperScreen/). ### Inspiration -KlipperScreen was inspired by [OctoScreen](https://github.com/Z-Bolt/OctoScreen/) and the need for a touchscreen GUI that -will natively work with [Klipper](https://github.com/Klipper3d/klipper) and [Moonraker](https://github.com/arksine/moonraker). + +KlipperScreen draws inspiration from [OctoScreen](https://github.com/Z-Bolt/OctoScreen/) and was developed to provide a native touchscreen GUI compatible with [Klipper](https://github.com/Klipper3d/klipper) and [Moonraker](https://github.com/arksine/moonraker). [![Main Menu](docs/img/panels/main_panel.png)](https://klipperscreen.readthedocs.io/en/latest/Panels/) -[More Screenshots](https://klipperscreen.readthedocs.io/en/latest/Panels/) +Explore more screenshots [here](https://klipperscreen.readthedocs.io/en/latest/Panels/). -### Translations Translation status +### Translations -Translations are hosted on Weblate, Thanks to the Weblate team for supporting the Open-Source community. +Translations for KlipperScreen are hosted on Weblate. Thanks to the Weblate team for supporting the open-source community. + + + Translation status + Click the widget below to access the translation platform: - Weblate widget + Weblate widget -### About the project +### About the Project -KlipperScreen has been created and maintained by Jordan Ruthe from 2020 to 2021 +KlipperScreen was created by Jordan Ruthe in 2020. -|Donate to Jordan| -|-| -|[Patreon](https://www.patreon.com/klipperscreen)| -|[Ko-fi](https://ko-fi.com/klipperscreen)| +| Donate to Jordan | +|------------------| +| [Patreon](https://www.patreon.com/klipperscreen) | +| [Ko-fi](https://ko-fi.com/klipperscreen) | -The current maintainer is Alfredo Monclus (alfrix) from 2021 onwards +Since 2021, the project has been maintained by Alfredo Monclus (alfrix). -|Dontate to Alfrix| -|-| -|[Ko-fi](https://ko-fi.com/alfrix)| +| Donate to Alfrix | +|------------------| +| [Ko-fi](https://ko-fi.com/alfrix) | -thanks to all the people who helped along the way. - -[Contributors](https://github.com/KlipperScreen/KlipperScreen/graphs/contributors) +We extend our gratitude to all contributors who have helped along the way. [Meet the contributors](https://github.com/KlipperScreen/KlipperScreen/graphs/contributors). ### Sponsors -![LDO](docs/img/LDO-LOGO_SQ.png) +![LDO](docs/img/LDO-LOGO_SQ.png) ![YUMI](docs/img/YUMI.png) -Thank you [LDO](https://ldomotors.com/) for sponsoring KlipperScreen and the open source community. +Special thanks to [LDO](https://ldomotors.com/) and [YUMI](https://wiki.yumi-lab.com/) for sponsoring KlipperScreen and the open-source community. \ No newline at end of file diff --git a/docs/FAQ.md b/docs/FAQ.md index 4f3c3b8f..64cb77bf 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -1,29 +1,49 @@ +Got it. Here’s the updated FAQ with the necessary modifications: + # Frequently Asked Questions ## What is the minimum Python version required? -The minimum version is Python 3.8, this is checked during install. +The minimum required version of Python is 3.8. This requirement is checked during installation. -## OctoPrint? +??? "Using Older Python Versions" + If you need to use Python 3.7, you can do so with KlipperScreen v0.4.1 by running: + ```sh + git reset --hard v0.4.1 + ``` -KlipperScreen was not designed to work with OctoPrint and there are no plans to make it compatible. +## Does KlipperScreen work with OctoPrint? -## Can i use KlipperScreen as a desktop application? +KlipperScreen is not designed to work with OctoPrint, and there are no plans to make it compatible. -Yes, First disable the service: +## Can I use KlipperScreen as a desktop application? -```shell +Yes, you can use KlipperScreen as a desktop application. During installation, do not install it as a service. If you have already installed it as a service, you can disable it by running: +```sh sudo systemctl disable KlipperScreen ``` +Then, you can open the application via the menu when needed. You can also find the shortcut in `KlipperScreen/scripts/KlipperScreen.desktop`. -and open the application via the menu when you need it. +## Why did the title bar turn red and display CPU and RAM usage? +The red title bar indicating high CPU and RAM usage is a warning system. High resource usage can lead to issues, such as "timer too close" errors in Klipper. If this warning appears during an update or maintenance process, it is generally not an issue—just avoid starting a print job until the warning clears. You can use htop or similar tools from an SSH connection to check what’s consuming the resources. -you can also find the shortcut in `KlipperScreen/scripts/KlipperScreen.desktop` +## How can I switch between multiple printers? -## Titlebar turned red and says CPU and RAM +KlipperScreen supports multiple printers. You can switch between them by configuring each printer's IP address in the KlipperScreen settings. This allows you to manage all your printers from a single interface, even if they are running on different hosts. -It's the high resource warning system, having your printer with very high usage of CPU or RAM will lead to issues, -usually involving timer too close in klipper, if it appears during an update or some maintanance process, it should not be an issue, -just don't start printing until it clears. +## Can I customize the KlipperScreen interface? +Yes, you can customize the KlipperScreen interface by editing the configuration files. Detailed instructions and options for customization can be found in the [documentation](https://klipperscreen.github.io/KlipperScreen/). + +## What should I do if my touchscreen is not responding correctly? + +If your touchscreen is not responding or has touch accuracy issues, check the [Touch Issues section](Troubleshooting/Touch_issues.md) in the troubleshooting guide. You may need to calibrate the touch settings or adjust the touch matrix. + +## How do I update KlipperScreen? + +To update KlipperScreen, follow the instructions in the [updating guide](Updating.md). + +## What if I sometimes see the desktop instead of KlipperScreen? + +If you sometimes see the desktop instead of KlipperScreen, and you only want to see KlipperScreen, you may have installed a distro with a full desktop environment. [Check these instructions](Troubleshooting/Desktop.md) on how to properly switch. diff --git a/docs/Hardware.md b/docs/Hardware.md index 4bdab17c..3a1c84b4 100644 --- a/docs/Hardware.md +++ b/docs/Hardware.md @@ -1,10 +1,10 @@ # Hardware -There are no recommended screens, but the minimum supported resolution is 480x320. +KlipperScreen supports a variety of screens, with a minimum supported resolution of 480x320. Generally, if a device can display a GNU/Linux desktop, it should be compatible with KlipperScreen. -In general, if the device can show a GNU/Linux desktop, then KlipperScreen should work too. +## Supported Hardware -#### Hardware known to work +The following screens are known to work with KlipperScreen: * [BTT PI TFT50](https://www.biqu.equipment/collections/lcd/products/bigtreetech-pi-tft50-v1-0-tft-display-for-raspberry-pi-3d-printer-part) * [BTT HDMI5/7](https://biqu.equipment/products/bigtreetech-hdmi5-v1-0-hdmi7-v1-0) @@ -16,17 +16,17 @@ In general, if the device can show a GNU/Linux desktop, then KlipperScreen shoul * [WAVESHARE 4.3 inch DSI LCD](https://www.waveshare.com/4.3inch-dsi-lcd.htm) * [Android phone](Android.md) +For more hardware known to work with KlipperScreen, visit the [Klipper Discourse](https://klipper.discourse.group/t/hardware-known-to-work-with-klipperscreen/35). -* [More known hardware in the klipper discourse](https://klipper.discourse.group/t/hardware-known-to-work-with-klipperscreen/35) +### Install -### Configuration +1. **Install Your Screen**: Follow the manufacturer’s instructions for installing your screen. If you see a white screen, it indicates that the installation was not successful. Ensure that you can at least see a console. +2. **Install KlipperScreen**: Once the screen is properly installed and functioning, proceed to [install KlipperScreen](Installation.md). -Follow the manufacturer instructions on how to install your screen. In general if you see a white screen, then it's not properly installed, ensure that you at least see a console, Then [install](Installation.md) KlipperScreen, if you are having troubles refer to the [troubleshooting page](Troubleshooting.md) for further information. +## Screen Rotation -## Screen rotation +For information on screen rotation, refer to the [Rotation section](Troubleshooting/Rotation.md) in the troubleshooting guide. -[Moved to Rotation](Troubleshooting/Rotation.md) +## Touchscreen Touch Rotation -## Touchscreen touch rotation - -[Moved to Touch issues](Troubleshooting/Touch_issues.md#touch-rotation-and-matrix) +For touchscreen rotation and matrix issues, see the [Touch Issues section](Troubleshooting/Touch_issues.md#touch-rotation-and-matrix) in the troubleshooting guide. \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md index 2c8ec817..6c54ae4c 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -1,74 +1,67 @@ # Installation -## First steps +## First Steps -Install the screen, following the instructions provided by the manufacturer, Some screens don't neeed extra software but some need to be installed with a script. -It's strongly recommended to test it and ensure your hardware is working with RaspberryOS, Ubuntu or any distro you like. -Once you have established that the screen is working, then proceed installing KlipperScreen. +1. **Install the Screen**: Follow the manufacturer’s instructions for installing your screen. Some screens may require additional software, while others might not. +2. **Test the Screen**: Ensure your hardware is functioning correctly by testing it with RaspberryOS, Ubuntu, or your preferred distribution. +3. **Proceed to Install KlipperScreen**: Once you’ve confirmed that the screen is working, you can proceed with installing KlipperScreen. ## Setup -The installation script is meant for RaspberryOS Lite, but it should work on other debian derivatives. +The installation script is designed for RaspberryOS Lite, but it should work on other Debian derivatives as well. -## Auto install +## Auto Install -[KIAUH](https://github.com/th33xitus/kiauh) is a tool that helps you install or upgrade Klipper, Moonraker, Mainsail, and other extensions. +[KIAUH](https://github.com/dw-0/kiauh) is a tool that helps you install or upgrade Klipper, Moonraker, Mainsail, and other extensions. -![Screenshot](img/install/KIAUH.png) - -You can visit [KIAUH on GitHub](https://github.com/th33xitus/kiauh) to learn more and view its documentation. +![KIAUH Screenshot](img/install/KIAUH.png) +Visit [KIAUH on GitHub](https://github.com/dw-0/kiauh) to learn more and view its documentation. ## Manual Install -Execute the following commands: +Follow these steps to manually install KlipperScreen: +Clone the KlipperScreen repository and run the installation script: ```sh cd ~/ git clone https://github.com/KlipperScreen/KlipperScreen.git ./KlipperScreen/scripts/KlipperScreen-install.sh ``` +This script will install the necessary packages, create a Python virtual environment at `~/.KlipperScreen-env`, and install a systemd service file. -This script will install the necessary packages, create a python virtual environment at -`~/.KlipperScreen-env` and install a systemd service file. - - -If you need a custom location for the configuration file, you can add -c or --configfile to the systemd file and specify -the location of your configuration file. - -## Moonraker configuration - -In moonraker.conf ensure that the IP of the device is a trusted client: - -```ini title="moonraker.conf" -[authorization] -trusted_clients: - 127.0.0.1 -``` - -Or add the [moonraker api key](https://moonraker.readthedocs.io/en/latest/installation/#retrieving-the-api-key) to [KlipperScreen.conf](Configuration.md) - -If you wish to use the update manager feature of moonraker for KlipperScreen, add the following block to `moonraker.conf`: - -```ini title="moonraker.conf" -[update_manager KlipperScreen] -type: git_repo -path: ~/KlipperScreen -origin: https://github.com/KlipperScreen/KlipperScreen.git -virtualenv: ~/.KlipperScreen-env -requirements: scripts/KlipperScreen-requirements.txt -system_dependencies: scripts/system-dependencies.json -managed_services: KlipperScreen -``` !!! tip - If you see warnings in other UIs ignore them until KlipperScreen finishes installing, and Moonraker is restarted. + If you need a custom location for the configuration file, you can add the `-c` or `--configfile` option to the systemd file and specify the desired location. +## Moonraker Configuration + +1. Ensure that the IP of the device is a trusted client in `moonraker.conf`: + ```ini + [authorization] + trusted_clients: + 127.0.0.1 + ``` + Alternatively, add the [Moonraker API key](https://moonraker.readthedocs.io/en/latest/installation/#retrieving-the-api-key) to `KlipperScreen.conf`. + +2. To use the update manager feature of Moonraker for KlipperScreen, add the following block to `moonraker.conf`: + ```ini + [update_manager KlipperScreen] + type: git_repo + path: ~/KlipperScreen + origin: https://github.com/KlipperScreen/KlipperScreen.git + virtualenv: ~/.KlipperScreen-env + requirements: scripts/KlipperScreen-requirements.txt + system_dependencies: scripts/system-dependencies.json + managed_services: KlipperScreen + ``` + +!!! tip + If you see warnings in other UIs, ignore them until KlipperScreen finishes installing and Moonraker is restarted. ## Printer Configuration -Some basic configuration needs to be applied for correct functionality. - -```ini title="printer.cfg" +Add the following basic configurations to your `printer.cfg` file for correct functionality: +```ini [virtual_sdcard] path: ~/printer_data/gcodes [display_status] @@ -77,4 +70,4 @@ path: ~/printer_data/gcodes ## Macros -You may need some macros for the printer to function as you expected, [read more in the macros page](macros.md) +You may need additional macros for the printer to function as expected. For more information, [read the macros page](macros.md). \ No newline at end of file diff --git a/docs/Troubleshooting/Last_resort.md b/docs/Troubleshooting/Last_resort.md index c4fd0faf..7dd5e695 100644 --- a/docs/Troubleshooting/Last_resort.md +++ b/docs/Troubleshooting/Last_resort.md @@ -1,27 +1,28 @@ -# Last resort to make the screen work +# Last Resort to Make the Screen Work -If the screen never shows the console or bootup text during startup, Then it's typically an improperly installed screen -See [Physical install issues](Physical_Install.md) +If your screen never shows the console or bootup text during startup, it is typically due to an improperly installed screen. See [Physical Install Issues](Physical_Install.md) for more information. -![boot](../img/troubleshooting/boot.png) +![Boot Screen](../img/troubleshooting/boot.png) -If the screen shows the bootup text, but ends in a blinking cursor or login prompt, -and no matter what you tried in [Troubleshooting](../Troubleshooting.md) you can't make it work, then do this: +If the screen shows the bootup text but ends with a blinking cursor or login prompt, and no matter what you tried in [Troubleshooting](../Troubleshooting.md) you can't make it work, then follow these steps: -1. Install a distro with a desktop enviromenment [Click to learn how to check](./Desktop.md) +1. **Install a Distro with a Desktop Environment** + [Click to learn how to check](./Desktop.md) -2. Ensure that the screen is working properly (display and touch) +2. **Ensure Proper Functionality** + Make sure the screen is working properly, including both display and touch functionality. -3. Deactivate the Desktop Environment to let KlipperScreen exclusively +3. **Deactivate the Desktop Environment for KlipperScreen** + To allow KlipperScreen to run exclusively, enter the following command in a terminal and press enter: + ```sh + sudo systemctl set-default multi-user.target && sudo reboot + ``` - ```sh title="On a terminal type this command and press enter" - sudo systemctl set-default multi-user.target && sudo reboot - ``` +4. **Reboot and Install KlipperScreen** + Wait for the system to reboot and then proceed to install KlipperScreen. -4. Wait for the reboot and install KlipperScreen +If it still doesn't work, or if you did something else to make it work and want to share your solution: -If it still doesn't work, or you did something else to make it work and want to share: +[Contact Us](../Contact.md) -[Contact us](../Contact.md) - -Remember to share the logs, as those aid a lot in the troubleshooting. +Remember to share the logs, as they are crucial for troubleshooting. \ No newline at end of file diff --git a/docs/Troubleshooting/Network.md b/docs/Troubleshooting/Network.md index ebb87fa2..0c37e91c 100644 --- a/docs/Troubleshooting/Network.md +++ b/docs/Troubleshooting/Network.md @@ -5,10 +5,10 @@ The network panel requires network-manager to function, (if you are using a fork this may not be the case) -if version of KlipperScreen installed was previous than v0.3.9, then re-run the installer and reboot +Usually permissions are set with the installer, try a re-run of the installer and reboot -??? "Alternative workaround for network-manager not having permissions" +???+ "Alternative workaround for network-manager not having permissions" in order to fix this polkit needs to be configured or disabled: diff --git a/docs/img/LDO-LOGO_SQ.png b/docs/img/LDO-LOGO_SQ.png deleted file mode 100644 index 6d8ffbbf58fc7328a60f636a3a2a7aadeed76297..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5900 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 iQ30b2A}*PZ!T$lb!syAHOelZ=0000 - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/img/sponsors/LDO.png b/docs/img/sponsors/LDO.png new file mode 100644 index 0000000000000000000000000000000000000000..ecc7e8137429ad08cff5ec3d9c7b9847fa0188ec GIT binary patch literal 7225 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 Hu0mjfkI?xq literal 0 HcmV?d00001 diff --git a/docs/img/sponsors/YUMI.png b/docs/img/sponsors/YUMI.png new file mode 100644 index 0000000000000000000000000000000000000000..66a5630713e8a39e4703877b214fcc9556ebf1ca GIT binary patch literal 6599 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Ν#%Ux28h!&*;sq)Rhn5(bZTz`K2E#_eI1@t>xIiRSn5ZON z%Ox`1cB8Y682JAZGa%bv_`hZpIFeG$rfU(5%eNKRT8d>9;{N$Sc_GM8_+sCO_j8N|P#h&4#J_@FpbFxtN%v7pY1BySuP zWkPQ>7Zk}8F-Z&x(6ka5K0ryhQh~?fV9+7Xr)&xZWw6==14`iq1gph-ux>%vriLdB z&N_IAZcSQorr3!w1ZCK0NddJcK;-AKK|j4)aztC}6=P6OT&iaf6a-dy0xP&MJSb?a zTohJv+8M3YLv)KVtz@v8pcG}YB&cC79uphFN~NFOe9SP6 zLBeI81co(0V3}tC%ft8Osz(jTYnIb2wl*kk&2rPkmfI6lzh*frF^of97cNynulZ8d znq`;;ONsLgZVfjs!}B4)rl91FOU+TD2@0Y#OJEq{{{dmLl;%{;ec%89002ovPDHLk FV1n5