From 5764c51c61ea8c0ceb818c61253da59e044754e9 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Thu, 8 Apr 2021 00:02:57 +0200 Subject: [PATCH] #1265 Display Refactor (#2149) --- FAQ.md | 6 +- build_sdcard.sh | 265 +++------ home.admin/00infoLCD.sh | 11 - home.admin/00raspiblitz.sh | 2 +- home.admin/00settingsMenuBasics.sh | 2 +- home.admin/40addHDD.sh | 3 +- home.admin/97addMobileWallet.sh | 44 +- home.admin/BBcreateInvoice.sh | 8 +- home.admin/BBfundWallet.sh | 6 +- home.admin/_bootstrap.provision.sh | 67 ++- home.admin/_bootstrap.sh | 29 +- home.admin/_commands.sh | 10 +- home.admin/config.scripts/blitz.display.sh | 543 ++++++++++++++++++ home.admin/config.scripts/blitz.gpio.py | 22 + home.admin/config.scripts/blitz.lcd.sh | 284 --------- home.admin/config.scripts/blitz.migration.sh | 6 +- .../config.scripts/blitz.touchscreen.sh | 2 +- .../config.scripts/bonus.btc-rpc-explorer.sh | 4 +- .../config.scripts/bonus.btcpayserver.sh | 4 +- .../bonus.cryptoadvance-specter.sh | 4 +- home.admin/config.scripts/bonus.electrs.sh | 4 +- home.admin/config.scripts/bonus.fullynoded.sh | 4 +- home.admin/config.scripts/bonus.lit.sh | 4 +- home.admin/config.scripts/bonus.lnbits.sh | 4 +- home.admin/config.scripts/bonus.lndconnect.sh | 4 +- home.admin/config.scripts/bonus.mempool.sh | 4 +- home.admin/config.scripts/bonus.rtl.sh | 4 +- .../config.scripts/bonus.sphinxrelay.sh | 4 +- home.admin/config.scripts/bonus.thunderhub.sh | 4 +- 29 files changed, 793 insertions(+), 565 deletions(-) create mode 100755 home.admin/config.scripts/blitz.display.sh create mode 100644 home.admin/config.scripts/blitz.gpio.py delete mode 100755 home.admin/config.scripts/blitz.lcd.sh diff --git a/FAQ.md b/FAQ.md index 8501b24ec..fdf8203a9 100644 --- a/FAQ.md +++ b/FAQ.md @@ -407,7 +407,7 @@ To build a SD card image from another branch than master, you follow the [Build For example if you want to make a build from the 'dev' branch you execute the following command: -`wget https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/build_sdcard.sh && sudo bash build_sdcard.sh false rootzoll dev true true true` +`wget --no-cache https://raw.githubusercontent.com/rootzoll/raspiblitz/dev/build_sdcard.sh && sudo bash build_sdcard.sh false rootzoll dev lcd true true` ## How can I build an SD card from my forked GitHub Repo? @@ -417,7 +417,7 @@ If you fork the RaspiBlitz repo (much welcome) and you want to run that code on * The long way: If you like to install/remove/change services and system configurations you need to build a SD card from your own code. Prepare like in [Build the SD Card Image](README.md#build-the-sd-card-image) from the README but in the end run the command: -`wget https://raw.githubusercontent.com/[GITHUB-USERNAME]/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh false [GITHUB-USERNAME] [BRANCH] true true true` +`wget --no-cache https://raw.githubusercontent.com/[GITHUB-USERNAME]/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh false [GITHUB-USERNAME] [BRANCH] lcd true true` If you are then working in your forked repo and want to update the scripts on your RaspiBlitz with your latest repo changes, run `/home/admin/XXsyncScripts.sh` - That's OK as long as you don't make changes to the SD card build script - for that you would need to build a fresh SD card again from your repo. @@ -537,7 +537,7 @@ Work notes for the process of producing a new SD card image release: * In terminal `ssh pi@[IP-OF-RASPIBLITZ]` * Password is `raspberry` * Run the following command BUT REPLACE `[BRANCH]` with the branch-string of your latest version -* `wget https://raw.githubusercontent.com/rootzoll/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh true rootzoll [BRANCH] true true true` +* `wget --no-cache https://raw.githubusercontent.com/rootzoll/raspiblitz/[BRANCH]/build_sdcard.sh && sudo bash build_sdcard.sh true rootzoll [BRANCH] lcd true true` * Monitor/Check outputs for warnings/errors - install LCD * Login new with `ssh admin@[IP-OF-RASPIBLITZ]` (pw: raspiblitz) and run `./XXprepareRelease.sh` * Disconnect WiFi/LAN on build laptop (hardware switch off) and shutdown diff --git a/build_sdcard.sh b/build_sdcard.sh index 06c82da6a..0ff18b432 100755 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -9,9 +9,9 @@ ########################################################################## echo "" -echo "*****************************************" +echo "****************************************." echo "* RASPIBLITZ SD CARD IMAGE SETUP v1.7 *" -echo "*****************************************" +echo "****************************************." echo "For details on optional parameters - see build script source code:" # 1st optional paramater: FATPACK @@ -55,20 +55,20 @@ if [ ${#githubBranch} -eq 0 ]; then fi echo "3) will use GITHUB-BRANCH --> '${githubBranch}'" -# 4rd optional paramater: LCD-DRIVER +# 4rd optional paramater: DISPLAY-CLASS # ---------------------------------------- -# could be 'false' or 'GPIO' (default) -# Use 'false' if you want to build an image that runs without a specialized LCD (like the GPIO). +# Could be 'hdmi', 'headless' or 'lcd' # On 'false' the standard video output is used (HDMI) by default. -lcdInstalled="$4" -if [ ${#lcdInstalled} -eq 0 ] || [ "${lcdInstalled}" == "true" ]; then - lcdInstalled="GPIO" +# https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813369284 +displayClass="$4" +if [ ${#displayClass} -eq 0 ] || [ "${displayClass}" == "false" ]; then + displayClass="hdmi" fi -if [ "${lcdInstalled}" != "false" ] && [ "${lcdInstalled}" != "GPIO" ]; then - echo "ERROR: LCD-DRIVER parameter needs to be either 'false' or 'GPIO'" +if [ "${displayClass}" != "hdmi" ] && [ "${displayClass}" != "lcd" ] && [ "${displayClass}" != "headless" ]; then + echo "ERROR: DISPLAY-CLASS parameter needs to be 'lcd', 'hdmi' or 'headless'" exit 1 else - echo "4) will use LCD-DRIVER --> '${lcdInstalled}'" + echo "4) will use DISPLAY-CLASS --> '${displayClass}'" fi # 5rd optional paramater: TWEAK-BOOTDRIVE @@ -353,7 +353,10 @@ echo "*** CONFIG ***" echo "root:raspiblitz" | sudo chpasswd echo "pi:raspiblitz" | sudo chpasswd -if [ "${lcdInstalled}" != "false" ]; then +# if not headless - make sure pi user is doing auto login to run display +if [ "${displayClass}" != "headless" ]; then + + # activate auto-login of pi user if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]||\ [ "${baseimage}" = "debian_rpi64" ]; then # set Raspi to boot up automatically with user pi (for the LCD) @@ -362,20 +365,58 @@ if [ "${lcdInstalled}" != "false" ]; then sudo bash -c "echo '[Service]' >> /etc/systemd/system/getty@tty1.service.d/autologin.conf" sudo bash -c "echo 'ExecStart=' >> /etc/systemd/system/getty@tty1.service.d/autologin.conf" sudo bash -c "echo 'ExecStart=-/sbin/agetty --autologin pi --noclear %I 38400 linux' >> /etc/systemd/system/getty@tty1.service.d/autologin.conf" - fi - - if [ "${baseimage}" = "dietpi" ]; then + elif [ "${baseimage}" = "dietpi" ]; then # set DietPi to boot up automatically with user pi (for the LCD) # requires AUTO_SETUP_AUTOSTART_TARGET_INDEX=7 in the dietpi.txt # /DietPi/dietpi/dietpi-autostart overwrites /etc/systemd/system/getty@tty1.service.d/dietpi-autologin.conf on reboot sudo sed -i 's/agetty --autologin root %I $TERM/agetty --autologin pi --noclear %I 38400 linux/' /DietPi/dietpi/dietpi-autostart - fi - - if [ "${baseimage}" = "ubuntu" ] || [ "${baseimage}" = "armbian" ]; then + elif [ "${baseimage}" = "ubuntu" ] || [ "${baseimage}" = "armbian" ]; then sudo bash -c "echo '[Service]' >> /lib/systemd/system/getty@.service" sudo bash -c "echo 'ExecStart=' >> /lib/systemd/system/getty@.service" sudo bash -c "echo 'ExecStart=-/sbin/agetty --autologin pi --noclear %I 38400 linux' >> /lib/systemd/system/getty@.service" + else + echo "FAIL: Autostart pi user not available for baseimage(${baseimage}) - please choose 'headless' on DISPLAY-CLASS" + exit 1 fi + + # activate auto-start of 00infoLCD.sh script on pi user login + if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]||\ + [ "${baseimage}" = "debian_rpi64" ]||[ "${baseimage}" = "armbian" ]||\ + [ "${baseimage}" = "ubuntu" ]; then + homeFile=/home/pi/.bashrc + autostartDone=$(grep -c "automatic start the LCD" $homeFile) + if [ ${autostartDone} -eq 0 ]; then + # bash autostart for pi + # run as exec to dont allow easy physical access by keyboard + # see https://github.com/rootzoll/raspiblitz/issues/54 + sudo bash -c 'echo "# automatic start the LCD info loop" >> /home/pi/.bashrc' + sudo bash -c 'echo "SCRIPT=/home/admin/00infoLCD.sh" >> /home/pi/.bashrc' + sudo bash -c 'echo "# replace shell with script => logout when exiting script" >> /home/pi/.bashrc' + sudo bash -c 'echo "exec \$SCRIPT" >> /home/pi/.bashrc' + echo "autostart LCD added to $homeFile" + else + echo "autostart LCD already in $homeFile" + fi + elif [ "${baseimage}" = "dietpi" ]; then + homeFile=/home/dietpi/.bashrc + autostartDone=$(grep -c "automatic start the LCD" $homeFile) + if [ ${autostartDone} -eq 0 ]; then + # bash autostart for dietpi + sudo bash -c 'echo "# automatic start the LCD info loop" >> /home/dietpi/.bashrc' + sudo bash -c 'echo "SCRIPT=/home/admin/00infoLCD.sh" >> /home/dietpi/.bashrc' + sudo bash -c 'echo "# replace shell with script => logout when exiting script" >> /home/dietpi/.bashrc' + sudo bash -c 'echo "exec \$SCRIPT" >> /home/dietpi/.bashrc' + echo "autostart LCD added to $homeFile" + else + echo "autostart LCD already in $homeFile" + fi + else + echo "FAIL: Script Autostart not available for baseimage(${baseimage}) - please choose 'headless' on DISPLAY-CLASS" + exit 1 + fi + +else + echo "# running headless ... no auto-login of pi user for display needed" fi # change log rotates @@ -529,8 +570,9 @@ echo '%sudo ALL=(ALL) NOPASSWD:ALL' | sudo EDITOR='tee -a' visudo # WRITE BASIC raspiblitz.info to sdcard echo "baseimage=${baseimage}" > /home/admin/raspiblitz.info echo "cpu=${cpu}" >> /home/admin/raspiblitz.info +echo "displayClass=${displayClass}" >> /home/admin/raspiblitz.info sudo mv ./raspiblitz.info /home/admin/raspiblitz.info -sudo chmod 777 /home/admin/raspiblitz.info +sudo chmod 755 /home/admin/raspiblitz.info echo "" echo "*** ADDING SERVICE USER bitcoin" @@ -599,10 +641,9 @@ fi # add /sbin to path for all sudo bash -c "echo 'PATH=\$PATH:/sbin' >> /etc/profile" +# script auto-start for admin user homeFile=/home/admin/.bashrc -autostart="automatically start main menu" -autostartDone=$(grep -c "$autostart" $homeFile) - +autostartDone=$(grep -c "automatically start main menu" $homeFile) if [ ${autostartDone} -eq 0 ]; then # bash autostart for admin sudo bash -c "echo '# shortcut commands' >> /home/admin/.bashrc" @@ -685,7 +726,7 @@ sudo apt install -y --no-install-recommends python3-systemd fail2ban echo "Activating CACHE RAM DISK ... " sudo /home/admin/config.scripts/blitz.cache.sh on -# *** Wifi & Bluetooth *** +# *** Wifi, Bluetooth & other configs *** if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]||\ [ "${baseimage}" = "debian_rpi64" ]; then @@ -719,16 +760,22 @@ if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]||\ # remove bluetooth packages sudo apt remove -y --purge pi-bluetooth bluez bluez-firmware - echo + + # disable audio echo "*** DISABLE AUDIO (snd_bcm2835) ***" sudo sed -i "s/^dtparam=audio=on/# dtparam=audio=on/g" /boot/config.txt echo + # disable DRM VC4 V3D echo "*** DISABLE DRM VC4 V3D driver ***" dtoverlay=vc4-fkms-v3d sudo sed -i "s/^dtoverlay=vc4-fkms-v3d/# dtoverlay=vc4-fkms-v3d/g" /boot/config.txt + echo + # I2C fix (make sure dtparam=i2c_arm is not on) + # see: https://github.com/rootzoll/raspiblitz/issues/1058#issuecomment-739517713 + sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt fi # *** FATPACK *** (can be activated by parameter - see details at start of script) @@ -1026,164 +1073,26 @@ sudo chown -R admin /home/admin echo "- OK install of LND done" echo "" -echo "*** DISPLAY OPTIONS ***" -# (do last - because makes a reboot) -# based on https://www.elegoo.com/tutorial/Elegoo%203.5%20inch%20Touch%20Screen%20User%20Manual%20V1.00.2017.10.09.zip -if [ "${lcdInstalled}" != "false" ]; then - - # lcd preparations based on os - if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]||\ - [ "${baseimage}" = "debian_rpi64" ]||[ "${baseimage}" = "armbian" ]||\ - [ "${baseimage}" = "ubuntu" ]; then - homeFile=/home/pi/.bashrc - autostart="automatic start the LCD" - autostartDone=$(grep -c "$autostart" $homeFile) - if [ ${autostartDone} -eq 0 ]; then - # bash autostart for pi - # run as exec to dont allow easy physical access by keyboard - # see https://github.com/rootzoll/raspiblitz/issues/54 - sudo bash -c 'echo "# automatic start the LCD info loop" >> /home/pi/.bashrc' - sudo bash -c 'echo "SCRIPT=/home/admin/00infoLCD.sh" >> /home/pi/.bashrc' - sudo bash -c 'echo "# replace shell with script => logout when exiting script" >> /home/pi/.bashrc' - sudo bash -c 'echo "exec \$SCRIPT" >> /home/pi/.bashrc' - echo "autostart LCD added to $homeFile" - else - echo "autostart LCD already in $homeFile" - fi - fi - if [ "${baseimage}" = "dietpi" ]; then - homeFile=/home/dietpi/.bashrc - startLCD="automatic start the LCD" - autostartDone=$(grep -c "$startLCD" $homeFile) - if [ ${autostartDone} -eq 0 ]; then - # bash autostart for dietpi - sudo bash -c 'echo "# automatic start the LCD info loop" >> /home/dietpi/.bashrc' - sudo bash -c 'echo "SCRIPT=/home/admin/00infoLCD.sh" >> /home/dietpi/.bashrc' - sudo bash -c 'echo "# replace shell with script => logout when exiting script" >> /home/dietpi/.bashrc' - sudo bash -c 'echo "exec \$SCRIPT" >> /home/dietpi/.bashrc' - echo "autostart LCD added to $homeFile" - else - echo "autostart LCD already in $homeFile" - fi - fi - - echo "" - if [ "${lcdInstalled}" == "GPIO" ]; then - if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "dietpi" ]; then - echo "*** 32bit LCD DRIVER ***" - echo "--> Downloading LCD Driver from Github" - cd /home/admin/ - sudo -u admin git clone https://github.com/MrYacha/LCD-show.git - sudo -u admin chmod -R 755 LCD-show - sudo -u admin chown -R admin:admin LCD-show - cd LCD-show/ - sudo -u admin git reset --hard 53dd0bf || exit 1 - # install xinput calibrator package - echo "--> install xinput calibrator package" - sudo apt install -y libxi6 - sudo dpkg -i xinput-calibrator_0.7.5-1_armhf.deb - - if [ "${baseimage}" = "dietpi" ]; then - echo "--> dietpi preparations" - sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf - sudo mkdir /etc/X11/xorg.conf.d - sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/ - sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/tft35a.dtbo - sudo cp -rf ./usr/99-calibration.conf-35 /etc/X11/xorg.conf.d/99-calibration.conf - sudo cp -rf ./usr/99-fbturbo.conf /usr/share/X11/xorg.conf.d/ - sudo cp ./usr/cmdline.txt /DietPi/ - sudo cp ./usr/inittab /etc/ - sudo cp ./boot/config-35.txt /DietPi/config.txt - # make LCD screen rotation correct - sudo sed -i "s/dtoverlay=tft35a/dtoverlay=tft35a:rotate=270/" /DietPi/config.txt - fi - elif [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then - echo "*** 64bit LCD DRIVER ***" - echo "--> Downloading LCD Driver from Github" - cd /home/admin/ - sudo -u admin git clone https://github.com/tux1c/wavesharelcd-64bit-rpi.git - sudo -u admin chmod -R 755 wavesharelcd-64bit-rpi - sudo -u admin chown -R admin:admin wavesharelcd-64bit-rpi - cd /home/admin/wavesharelcd-64bit-rpi - sudo -u admin git reset --hard 5a206a7 || exit 1 - - # from https://github.com/tux1c/wavesharelcd-64bit-rpi/blob/master/install.sh - # prepare X11 - rm -rf /etc/X11/xorg.conf.d/40-libinput.conf - mkdir -p /etc/X11/xorg.conf.d - cp -rf ./99-calibration.conf /etc/X11/xorg.conf.d/99-calibration.conf - # cp -rf ./99-fbturbo.conf /etc/X11/xorg.conf.d/99-fbturbo.conf # there is no such file - - # load module on boot - cp ./waveshare35a.dtbo /boot/overlays/ - echo "hdmi_force_hotplug=1" >> /boot/config.txt - echo "dtparam=i2c_arm=on" >> /boot/config.txt - # don't enable SPI and UART ports by default - # echo "dtparam=spi=on" >> /boot/config.txt - # echo "enable_uart=1" >> /boot/config.txt - echo "dtoverlay=waveshare35a:rotate=90" >> /boot/config.txt - cp ./cmdline.txt /boot/ - - # touch screen calibration - apt-get install -y xserver-xorg-input-evdev - cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf - # TODO manual touchscreen calibration option - # https://github.com/tux1c/wavesharelcd-64bit-rpi#adapting-guide-to-other-lcds - fi - else - echo "FAIL: Unknown LCD-DRIVER: ${lcdInstalled}" - exit 1 - fi - -else - echo "- LCD options are deactivated" -fi - -# *** RASPIBLITZ IMAGE READY *** -echo "" -echo "**********************************************" -echo "SD CARD BUILD DONE" -echo "**********************************************" -echo "" - +echo "*** raspiblitz.info ***" sudo cat /home/admin/raspiblitz.info -if [ "${lcdInstalled}" != "false" ]; then - echo "Your SD Card Image for RaspiBlitz is almost ready." - if [ "${baseimage}" = "raspbian" ]; then - echo "Last step is to install LCD drivers. This will reboot your Pi when done." - echo "" - fi -else - echo "Your SD Card Image for RaspiBlitz is ready." -fi -echo "Take the chance & look thru the output above if you can spot any error." +# *** RASPIBLITZ IMAGE READY INFO *** +echo "" +echo "**********************************************" +echo "BASIC SD CARD BUILD DONE" +echo "**********************************************" +echo "" +echo "Your SD Card Image for RaspiBlitz is ready (might still do display config)." +echo "Take the chance & look thru the output above if you can spot any errors or warnings." echo "" -if [ "${lcdInstalled}" != "false" ]; then - echo "After final reboot - your SD Card Image is ready." - echo "" -fi echo "IMPORTANT IF WANT TO MAKE A RELEASE IMAGE FROM THIS BUILD:" -echo "login once after reboot without external HDD/SSD and run 'XXprepareRelease.sh'" -echo "REMEMBER for login now use --> user:admin password:raspiblitz" +echo "1. login fresh --> user:admin password:raspiblitz" +echo "2. run --> ./XXprepareRelease.sh" echo "" -if [ "${lcdInstalled}" == "GPIO" ]; then - # activate LCD and trigger reboot - # dont do this on dietpi to allow for automatic build - if [ "${baseimage}" = "raspbian" ]; then - echo "Installing 32-bit LCD drivers ..." - sudo chmod +x -R /home/admin/LCD-show - cd /home/admin/LCD-show/ - sudo apt-mark hold raspberrypi-bootloader - sudo ./LCD35-show - elif [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then - echo "Installing 64-bit LCD drivers ..." - sudo chmod +x -R /home/admin/wavesharelcd-64bit-rpi - cd /home/admin/wavesharelcd-64bit-rpi - sudo apt-mark hold raspberrypi-bootloader - sudo ./install.sh - else - echo "Use 'sudo reboot' to restart manually." - fi +# (do last - because might trigger reboot) +if [ "${displayClass}" != "hdmi" ]; then + echo "*** ADDITIONAL DISPLAY OPTIONS ***" + echo "- calling: blitz.display.sh set-display ${displayClass}" + sudo blitz.display.sh set-display ${displayClass} fi \ No newline at end of file diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index e95869bea..00bcf4250 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -78,17 +78,6 @@ chain="" while : do - # save some CPU / log clutter on a "headless" installation (no LCD attached) - # by running the LCD stuff each 5 minutes that otherwise will be run every 5 seconds - # - # just insert a line "headless=on" into your "/mnt/hdd/raspiblitz.conf" file - # - isHeadless=$(cat "${configFile}" 2>/dev/null | grep -Ec "headless=1|headless=on") - if [ ${isHeadless} -gt 0 ]; then - echo "*** headless=on sleeping 60 seconds ***" | systemd-cat - sleep 60 - fi - ########################### # CHECK BASIC DATA ########################### diff --git a/home.admin/00raspiblitz.sh b/home.admin/00raspiblitz.sh index 4349a2693..c0d5ee7c1 100755 --- a/home.admin/00raspiblitz.sh +++ b/home.admin/00raspiblitz.sh @@ -18,7 +18,7 @@ if [ "${error}" != "" ]; then fi # check if HDD is connected -if [ ${isMounted} -eq 0 ] && [ ${#hddCandidate} -eq 0 ]; then +if [ "${isMounted}" == "0" ] && [ ${#hddCandidate} -eq 0 ]; then echo "***********************************************************" echo "WARNING: NO HDD FOUND -> Shutdown, connect HDD and restart." echo "***********************************************************" diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index fe7dc972e..a952a579e 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -315,7 +315,7 @@ if [ ${check} -eq 1 ]; then choice="1"; fi if [ "${lcdrotate}" != "${choice}" ]; then echo "LCD Rotate Setting changed .." anychange=1 - sudo /home/admin/config.scripts/blitz.lcd.sh rotate ${choice} + sudo /home/admin/config.scripts/blitz.display.sh rotate ${choice} needsReboot=1 else echo "LCD Rotate Setting unchanged." diff --git a/home.admin/40addHDD.sh b/home.admin/40addHDD.sh index 295060616..261bdcb23 100755 --- a/home.admin/40addHDD.sh +++ b/home.admin/40addHDD.sh @@ -100,7 +100,8 @@ else echo "network=${network}" >> /home/admin/raspiblitz.conf echo "chain=${chain}" >> /home/admin/raspiblitz.conf echo "hostname=${hostname}" >> /home/admin/raspiblitz.conf - echo "lcd2hdmi=${lcd2hdmi}" >> /home/admin/raspiblitz.conf + echo "displayClass=${displayClass}" >> /home/admin/raspiblitz.conf + echo "displayType=${displayType}" >> /home/admin/raspiblitz.conf echo "lcdrotate=1" >> /home/admin/raspiblitz.conf sudo mv /home/admin/raspiblitz.conf $configFile diff --git a/home.admin/97addMobileWallet.sh b/home.admin/97addMobileWallet.sh index 1e213080b..3ce835052 100755 --- a/home.admin/97addMobileWallet.sh +++ b/home.admin/97addMobileWallet.sh @@ -149,7 +149,7 @@ fi CHOICE=$(whiptail --clear --title "Choose Mobile Wallet" --menu "" 14 50 8 "${OPTIONS[@]}" 2>&1 >/dev/tty) -/home/admin/config.scripts/blitz.lcd.sh hide +/home/admin/config.scripts/blitz.display.sh hide clear echo "creating install info ..." @@ -177,29 +177,29 @@ case $CHOICE in ;; ZAP_IOS) appstoreLink="https://apps.apple.com/us/app/zap-bitcoin-lightning-wallet/id1406311960" - #/home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} + #/home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} #whiptail --title "Install Testflight and Zap on your iOS device" \ # --yes-button "continue" \ # --no-button "link as QR code" \ # --yesno "Search for 'Zap Bitcoin' in Apple Appstore for basic version\nOr join public beta test for latest features:\n${appstoreLink}\n\nJoin testing and follow ALL instructions.\n\nWhen installed and started -> continue" 11 65 # if [ $? -eq 1 ]; then - # /home/admin/config.scripts/blitz.lcd.sh qr-console ${appstoreLink} + # /home/admin/config.scripts/blitz.display.sh qr-console ${appstoreLink} #fi - /home/admin/config.scripts/blitz.lcd.sh image /home/admin/raspiblitz/pictures/app_zap.png + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zap.png whiptail --title "Install Fully Noded on your iOS device" \ --yes-button "Continue" \ --no-button "StoreLink" \ --yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'Zap Bitcoin'\n\nCheck that logo is like on LCD & author: Zap Technologies LLC\nWhen app is installed and started --> Continue." 12 65 if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} whiptail --title " App Store Link " --msgbox "\ To install app open the following link:\n ${appstoreLink}\n Or scan the qr code on the LCD with your mobile phone. " 11 70 fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide checkIP2TOR LND-GRPC-API see https://github.com/rootzoll/raspiblitz/issues/1001#issuecomment-634580257 if [ ${#ip2tor} -eq 0 ]; then @@ -210,20 +210,20 @@ Or scan the qr code on the LCD with your mobile phone. ;; ZAP_ANDROID) appstoreLink="https://play.google.com/store/apps/details?id=zapsolutions.zap" - /home/admin/config.scripts/blitz.lcd.sh image /home/admin/raspiblitz/pictures/app_zap.png + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zap.png whiptail --title "Install Zap on your Android Phone" \ --yes-button "Continue" \ --no-button "StoreLink" \ --yesno "Open the Android Play Store on your mobile phone.\n\nSearch for --> 'zap bitcoin app'\n\nCheck that logo is like on LCD and author is: Zap\nWhen app is installed and started --> Continue." 12 65 if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} whiptail --title " App Store Link " --msgbox "\ To install app open the following link:\n ${appstoreLink}\n Or scan the qr code on the LCD with your mobile phone. " 11 70 fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide checkIP2TOR LND-GRPC-API if [ ${#ip2tor} -eq 0 ]; then choose_IP_or_TOR @@ -250,64 +250,64 @@ Please go to MAINMENU > SERVICES and activate KEYSEND first. --no-button "Link as QR code" \ --yesno "Download & install the SendMany APK (armeabi-v7) from GitHub:\n\n${appstoreLink}\n\nEasiest way to scan QR code on LCD and download/install.\n\nWhen installed and started -> continue." 13 65 if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} - /home/admin/config.scripts/blitz.lcd.sh qr-console ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr-console ${appstoreLink} fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide checkIP2TOR LND-GRPC-API /home/admin/config.scripts/bonus.lndconnect.sh sendmany-android ${connect} exit 1; ;; ZEUS_IOS) appstoreLink="https://testflight.apple.com/join/gpVFzEHN" - /home/admin/config.scripts/blitz.lcd.sh image /home/admin/raspiblitz/pictures/app_zeus.png + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png whiptail --title "Install Testflight and Zeus on your iOS device" \ --yes-button "Continue" \ --no-button "Link as QR Code" \ --yesno "At the moment this app is in public beta testing.\nFirst open Apple Apstore, search & install 'TestFlight' app.\n\nThen open the following link on your mobile:\n${appstoreLink}\n\nUse 'Open In TestFlight' option of your mobile browser.\nWhen Zeus is installed and started --> Continue." 14 65 if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} - /home/admin/config.scripts/blitz.lcd.sh qr-console ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr-console ${appstoreLink} fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.lndconnect.sh zeus-ios tor exit 1; ;; ZEUS_ANDROID) appstoreLink="https://play.google.com/store/apps/details?id=app.zeusln.zeus" - /home/admin/config.scripts/blitz.lcd.sh image /home/admin/raspiblitz/pictures/app_zeus.png + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_zeus.png whiptail --title "Install Zeus on your Android Phone" \ --yes-button "Continue" \ --no-button "StoreLink" \ --yesno "Open the Android Play Store on your mobile phone.\n\nSearch for --> 'zeus bitcoin app'\n\nCheck that logo is like on LCD and author is: Evan Kaloudis\nWhen app is installed and started --> Continue." 12 65 if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} whiptail --title " App Store Link " --msgbox "\ To install app open the following link:\n ${appstoreLink}\n Or scan the qr code on the LCD with your mobile phone. " 11 70 fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.lndconnect.sh zeus-android tor exit 1; ;; FULLY_NODED) appstoreLink="https://apps.apple.com/us/app/fully-noded/id1436425586" - /home/admin/config.scripts/blitz.lcd.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/app_fullynoded.png whiptail --title "Install Fully Noded on your iOS device" \ --yes-button "Continue" \ --no-button "StoreLink" \ --yesno "Open the Apple App Store on your mobile phone.\n\nSearch for --> 'fully noded'\n\nCheck that logo is like on LCD and author is: Denton LLC\nWhen app is installed and started --> Continue." 12 65 if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr ${appstoreLink} + /home/admin/config.scripts/blitz.display.sh qr ${appstoreLink} whiptail --title " App Store Link " --msgbox "\ To install app open the following link:\n ${appstoreLink}\n Or scan the qr code on the LCD with your mobile phone. " 11 70 fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide /home/admin/config.scripts/bonus.fullynoded.sh exit 1; ;; diff --git a/home.admin/BBcreateInvoice.sh b/home.admin/BBcreateInvoice.sh index 811c915c8..a291bf1a7 100755 --- a/home.admin/BBcreateInvoice.sh +++ b/home.admin/BBcreateInvoice.sh @@ -68,7 +68,7 @@ else rhash=$(echo "$result" | grep r_hash | cut -d '"' -f4) payReq=$(echo "$result" | grep payment_request | cut -d '"' -f4) - /home/admin/config.scripts/blitz.lcd.sh qr "${payReq}" + /home/admin/config.scripts/blitz.display.sh qr "${payReq}" if [ $(sudo dpkg-query -l | grep "ii qrencode" | wc -l) = 0 ]; then sudo apt-get install qrencode -y > /dev/null @@ -99,8 +99,8 @@ else echo $result echo echo "Returning to menu - OK Invoice payed." - /home/admin/config.scripts/blitz.lcd.sh hide - /home/admin/config.scripts/blitz.lcd.sh image /home/admin/raspiblitz/pictures/ok.png + /home/admin/config.scripts/blitz.display.sh hide + /home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/ok.png sleep 2 break fi @@ -119,7 +119,7 @@ else done - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide fi echo "Press ENTER to return to main menu." diff --git a/home.admin/BBfundWallet.sh b/home.admin/BBfundWallet.sh index f0e9f59ce..3425089a2 100755 --- a/home.admin/BBfundWallet.sh +++ b/home.admin/BBfundWallet.sh @@ -55,7 +55,7 @@ if [ "$chain" = "test" ]; then fi echo "generating QR code ... please wait" -/home/admin/config.scripts/blitz.lcd.sh qr "$network:${address}" +/home/admin/config.scripts/blitz.display.sh qr "$network:${address}" # dialog with instructions while QR code is shown on LCD whiptail --backtitle "Fund your on chain wallet" \ @@ -66,11 +66,11 @@ whiptail --backtitle "Fund your on chain wallet" \ # display QR code if [ $? -eq 1 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr-console "$network:${address}" + /home/admin/config.scripts/blitz.display.sh qr-console "$network:${address}" fi # clean up -/home/admin/config.scripts/blitz.lcd.sh hide +/home/admin/config.scripts/blitz.display.sh hide # follow up info whiptail --backtitle "Fund your on chain wallet" \ diff --git a/home.admin/_bootstrap.provision.sh b/home.admin/_bootstrap.provision.sh index 5ed26a8f1..ee7ccfefa 100755 --- a/home.admin/_bootstrap.provision.sh +++ b/home.admin/_bootstrap.provision.sh @@ -37,6 +37,9 @@ fi echo "CHECK IF SD CARD NEEDS EXPANSION" >> ${logFile} source ${infoFile} +# remember the DisplayClass from info file - before its gets overwritten by raspiblitz.conf to detect change +infoFileDisplayClass="${displayClass}" + minimumSizeByte=8192000000 rootPartition=$(sudo mount | grep " / " | cut -d " " -f 1 | cut -d "/" -f 3) rootPartitionBytes=$(lsblk -b -o NAME,SIZE | grep "${rootPartition}" | tr -s ' ' | cut -d " " -f 2) @@ -70,6 +73,8 @@ if [ ${#rootPartition} -gt 0 ]; then if [ -x ${resizeRaspbian} ]; then echo "RUNNING EXPAND RASPBERRYPI: ${resizeRaspbian}" >> ${logFile} sudo $resizeRaspbian --expand-rootfs + echo "going into reboot" >> ${logFile} + sudo cp ${logFile} ${logFile}.fsexpand.recover sudo shutdown -r now exit 0 else @@ -80,6 +85,8 @@ if [ ${#rootPartition} -gt 0 ]; then if [ -x ${resizeArmbian} ]; then echo "RUNNING EXPAND ARMBIAN: ${resizeArmbian}" >> ${logFile} sudo $resizeArmbian start + echo "going into reboot" >> ${logFile} + sudo cp ${logFile} ${logFile}.fsexpand.recover sudo shutdown -r now exit 0 else @@ -100,18 +107,58 @@ fi sudo chmod 777 ${configFile} source ${configFile} -# check if the system was configured for HDMI and needs switch -# keep as one of the first so that user can see video output +########################## +# DISPLAY SETTINGS +########################## + +# check if the raspiblitz config has a different display mode than the build image +echo "### DISPLAY SETTINGS ###" >> ${logFile} + +# OLD: when nothing is set in raspiblitz.conf (<1.7) +existsDisplayClass=$(sudo cat ${configFile} | grep -c "displayClass=") +if [ "${existsDisplayClass}" == "0" ]; then + displayClass="lcd" +fi + +# OLD: lcd2hdmi (deprecated) if [ "${lcd2hdmi}" == "on" ]; then - echo "RaspiBlitz has config to run with HDMI video outout." >> ${logFile} - # check that raspiblitz.info shows that confing script was not run yet - switchScriptNotRunYet=$(sudo cat /home/admin/raspiblitz.info | grep -c "lcd2hdmi=off") - if [ ${switchScriptNotRunYet} -eq 1 ]; then - echo "--> Switching to HDMI video output & rebooting" >> ${logFile} - sudo /home/admin/config.scripts/blitz.lcd.sh hdmi on + echo "Convert lcd2hdmi=on to displayClass='hdmi'" >> ${logFile} + sudo sed -i "s/^lcd2hdmi=.*//g" ${configFile} + echo "displayClass=hdmi" >> ${configFile} + displayClass="hdmi" +elif [ "${lcd2hdmi}" != "" ]; then + echo "Remove old lcd2hdmi pramater from config" >> ${logFile} + sudo sed -i "s/^lcd2hdmi=.*//g" ${configFile} + displayClass="lcd" +fi + +# OLD: headless (deprecated) +if [ "${headless}" == "on" ]; then + echo "Convert headless=on to displayClass='headless'" >> ${logFile} + sudo sed -i "s/^headless=.*//g" ${configFile} + echo "displayClass=headless" >> ${configFile} + displayClass="headless" +elif [ "${headless}" != "" ]; then + echo "Remove old headless pramater from config" >> ${logFile} + sudo sed -i "s/^headless=.*//g" ${configFile} + displayClass="lcd" +fi + +# NEW: decide by displayClass +echo "raspiblitz.info(${infoFileDisplayClass}) raspiblitz.conf(${displayClass})" >> ${logFile} +if [ "${infoFileDisplayClass}" != "" ] && [ "${displayClass}" != "" ]; then + if [ "${infoFileDisplayClass}" != "${displayClass}" ]; then + echo "Need to update displayClass from (${infoFileDisplayClass}) to (${displayClass})'" >> ${logFile} + sudo /home/admin/config.scripts/blitz.display.sh set-display ${displayClass} >> ${logFile} + echo "going into reboot" >> ${logFile} + sudo cp ${logFile} ${logFile}.display.recover + sudo shutdown -r now + exit 0 else - echo "OK RaspiBlitz was already switched to HDMI output." >> ${logFile} + echo "Display Setting is correct ... no need for change" >> ${logFile} fi +else + echo "WARN values in raspiblitz info and/or conf file seem broken" >> ${logFile} fi ########################## @@ -415,7 +462,7 @@ if [ "${#lcdrotate}" -eq 0 ]; then fi echo "Provisioning LCD rotate - run config script" >> ${logFile} sudo sed -i "s/^message=.*/message='LCD Rotate'/g" ${infoFile} -sudo /home/admin/config.scripts/blitz.lcd.sh rotate ${lcdrotate} >> ${logFile} 2>&1 +sudo /home/admin/config.scripts/blitz.display.sh rotate ${lcdrotate} >> ${logFile} 2>&1 # TOUCHSCREEN if [ "${#touchscreen}" -gt 0 ]; then diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 35578b958..e0b6add10 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -69,11 +69,16 @@ network="" chain="" setupStep=0 fsexpanded=0 -lcd2hdmi="off" +# see https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813369284 +displayClass="lcd" +displayType="" # try to load old values if available (overwrites defaults) source ${infoFile} 2>/dev/null +# try to load config values if available (config overwrites info) +source ${configFile} 2>/dev/null + # resetting info file echo "Resetting the InfoFile: ${infoFile}" echo "state=starting" > $infoFile @@ -83,7 +88,8 @@ echo "cpu=${cpu}" >> $infoFile echo "network=${network}" >> $infoFile echo "chain=${chain}" >> $infoFile echo "fsexpanded=${fsexpanded}" >> $infoFile -echo "lcd2hdmi=${lcd2hdmi}" >> $infoFile +echo "displayClass=${displayClass}" >> $infoFile +echo "displayType=${displayType}" >> $infoFile echo "setupStep=${setupStep}" >> $infoFile if [ "${setupStep}" != "100" ]; then echo "hostname=${hostname}" >> $infoFile @@ -141,14 +147,7 @@ fi # see https://github.com/rootzoll/raspiblitz/issues/647 # see https://github.com/rootzoll/raspiblitz/pull/1580 randnum=$(shuf -i 0-7 -n 1) -lcdExists=$(sudo ls /dev/fb1 2>/dev/null | grep -c "/dev/fb1") -if [ ${lcdExists} -eq 1 ] ; then - # LCD - sudo fbi -a -T 1 -d /dev/fb1 --noverbose /home/admin/raspiblitz/pictures/startlogo${randnum}.png -else - # HDMI - sudo fbi -a -T 1 -d /dev/fb0 --noverbose /home/admin/raspiblitz/pictures/startlogo${randnum}.png -fi +/home/admin/config.scripts/blitz.display.sh image /home/admin/raspiblitz/pictures/startlogo${randnum}.png sleep 5 sudo killall -3 fbi @@ -207,18 +206,10 @@ if [ ${forceHDMIoutput} -eq 1 ]; then sudo rm /boot/hdmi* # switch to HDMI what will trigger reboot echo "Switching HDMI ON ... (reboot) " >> /home/admin/raspiblitz.recover.log - sudo /home/admin/config.scripts/blitz.lcd.sh hdmi on + sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi exit 0 fi -################################ -# UPDATE LCD DRIVERS IF NEEEDED -################################ - -if [ "${lcd2hdmi}" != "on" ]; then - sudo /home/admin/config.scripts/blitz.lcd.sh check-repair >> $logFile -fi - ################################ # SSH SERVER CERTS RESET # if a file called 'ssh.reset' gets diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 016f6275c..546926dea 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -76,13 +76,19 @@ function github() { # command: hdmi function hdmi() { echo "# SWITCHING VIDEO OUTPUT TO --> HDMI" - sudo /home/admin/config.scripts/blitz.lcd.sh hdmi on + sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi } # command: lcd function lcd() { echo "# SWITCHING VIDEO OUTPUT TO --> LCD" - sudo /home/admin/config.scripts/blitz.lcd.sh hdmi off + sudo /home/admin/config.scripts/blitz.display.sh set-display lcd +} + +# command: headless +function headless() { + echo "# SWITCHING VIDEO OUTPUT TO --> HEADLESS" + sudo /home/admin/config.scripts/blitz.display.sh set-display headless } # command: manage diff --git a/home.admin/config.scripts/blitz.display.sh b/home.admin/config.scripts/blitz.display.sh new file mode 100755 index 000000000..edb4f40ab --- /dev/null +++ b/home.admin/config.scripts/blitz.display.sh @@ -0,0 +1,543 @@ +#!/bin/bash + +# command info +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# make changes to the LCD screen" + echo "# blitz.display.sh rotate [on|off]" + echo "# blitz.display.sh image [path]" + echo "# blitz.display.sh qr [datastring]" + echo "# blitz.display.sh qr-console [datastring]" + echo "# blitz.display.sh hide" + echo "# blitz.display.sh hdmi [on|off] ---> DEPRECATED use set-display" + echo "# blitz.display.sh test-lcd-connect" + echo "# blitz.display.sh set-display [hdmi|lcd|headless]" + exit 1 +fi + +# load config +source /home/admin/raspiblitz.info 2>/dev/null +source /mnt/hdd/raspiblitz.conf 2>/dev/null + +# Make sure needed packages are installed +if [ $(sudo dpkg-query -l | grep "ii fbi" | wc -l) = 0 ]; then + sudo apt-get install fbi -y > /dev/null +fi +if [ $(sudo dpkg-query -l | grep "ii qrencode" | wc -l) = 0 ]; then + sudo apt-get install qrencode -y > /dev/null +fi + +# 1. Parameter: lcd command +command=$1 + +# check if LCD (/dev/fb1) or HDMI (/dev/fb0) +# see https://github.com/rootzoll/raspiblitz/pull/1580 +# but basically this just says if the driver for GPIO LCD is installed - not if connected +lcdExists=$(sudo ls /dev/fb1 2>/dev/null | grep -c "/dev/fb1") + +################## +# ROTATE +# see issue: https://github.com/rootzoll/raspiblitz/issues/681 +################### + +if [ "${command}" == "rotate" ]; then + + # TURN ROTATE ON (the new default) + if [ "$2" = "1" ] || [ "$2" = "on" ]; then + + # add default 'lcdrotate' raspiblitz.conf if needed + if [ ${#lcdrotate} -eq 0 ]; then + echo "lcdrotate=0" >> /mnt/hdd/raspiblitz.conf + fi + + # change rotation config + echo "# Turn ON: LCD ROTATE" + sudo sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=90/g" /boot/config.txt + sudo rm /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null + + # update raspiblitz conf file + sudo sed -i "s/^lcdrotate=.*/lcdrotate=1/g" /mnt/hdd/raspiblitz.conf + echo "# OK - a restart is needed: sudo shutdown -r now" + + # TURN ROTATE OFF + elif [ "$2" = "0" ] || [ "$2" = "off" ]; then + + # change rotation config + echo "#Turn OFF: LCD ROTATE" + sudo sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=270/g" /boot/config.txt + + # if touchscreen is on + if [ "${touchscreen}" = "1" ]; then + echo "# also rotate touchscreen ..." + cat << EOF | sudo tee /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null +Section "InputClass" + Identifier "libinput touchscreen catchall" + MatchIsTouchscreen "on" + Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1" + MatchDevicePath "/dev/input/event*" + Driver "libinput" +EndSection +EOF + fi + + # update raspiblitz conf file + sudo sed -i "s/^lcdrotate=.*/lcdrotate=0/g" /mnt/hdd/raspiblitz.conf + echo "OK - a restart is needed: sudo shutdown -r now" + + else + echo "error='missing second parameter - see help'" + exit 1 + fi + exit 0 +fi + +################### +# IMAGE +################### + +if [ "${command}" == "image" ]; then + + imagePath=$2 + if [ ${#imagePath} -eq 0 ]; then + echo "error='missing second parameter - see help'" + exit 1 + else + # test the image path - if file exists + if [ -f "$imagePath" ]; then + echo "# OK - file exists: ${imagePath}" + else + echo "error='file does not exist'" + exit 1 + fi + fi + + # see https://github.com/rootzoll/raspiblitz/pull/1580 + if [ ${lcdExists} -eq 1 ] ; then + # LCD + sudo fbi -a -T 1 -d /dev/fb1 --noverbose ${imagePath} 2> /dev/null + else + # HDMI + sudo fbi -a -T 1 -d /dev/fb0 --noverbose ${imagePath} 2> /dev/null + fi + exit 0 +fi + +################### +# QR CODE +################### + +if [ "${command}" == "qr" ]; then + + datastring=$2 + if [ ${#datastring} -eq 0 ]; then + echo "error='missing second parameter - see help'" + exit 1 + fi + + qrencode -l L -o /home/admin/qr.png "${datastring}" > /dev/null + # see https://github.com/rootzoll/raspiblitz/pull/1580 + if [ ${lcdExists} -eq 1 ] ; then + # LCD + sudo fbi -a -T 1 -d /dev/fb1 --noverbose /home/admin/qr.png 2> /dev/null + else + # HDMI + sudo fbi -a -T 1 -d /dev/fb0 --noverbose /home/admin/qr.png 2> /dev/null + fi + exit 0 +fi + +################### +# QR CODE KONSOLE +# fallback if no LCD is available +################### + +if [ "${command}" == "qr-console" ]; then + + datastring=$2 + if [ ${#datastring} -eq 0 ]; then + echo "error='missing second parameter - see help'" + exit 1 + fi + + whiptail --title "Get ready" --backtitle "QR-Code in Terminal Window" --msgbox "Make this terminal window as large as possible - fullscreen would be best. \n\nThe QR-Code might be too large for your display. In that case, shrink the letters by pressing the keys Ctrl and Minus (or Cmd and Minus if you are on a Mac) \n\nPRESS ENTER when you are ready to see the QR-code." 15 60 + + clear + qrencode -t ANSI256 ${datastring} + echo "(To shrink QR code: macOS press CMD- / LINUX press CTRL-) Press ENTER when finished." + read key + + clear + exit 0 +fi + +################### +# HIDE +################### + +if [ "${command}" == "hide" ]; then + sudo killall -3 fbi + shred -u /home/admin/qr.png 2> /dev/null + exit 0 +fi + +################### +# TEST LCD CONNECT +# only tested on RaspiOS 64-bit with RaspberryPi 4 +# https://github.com/rootzoll/raspiblitz/issues/1265#issuecomment-813660030 +################### + +if [ "${command}" == "test-lcd-connect" ]; then + echo "# IMPORTANT --> just gives correct value first time called after boot" + source <(sudo python /home/admin/config.scripts/blitz.gpio.py in 17) + if [ "${pinValue}" == "1" ]; then + echo "gpioLcdConnected=1" + elif [ "${pinValue}" == "0" ]; then + echo "gpioLcdConnected=0" + else + echo "# FAIL: only works on raspiOS 64-bit & RaspberryPi 4" + echo "# test directly with --> sudo python /home/admin/config.scripts/blitz.gpio.py in 17" + echo "err='detection not possible'" + exit 1 + fi + exit 0 +fi + +############################### +# HDMI (deprecated - redirect) +############################### +if [ "${command}" == "hdmi" ]; then + secondParameter=$2 + if [ "${secondParameter}" == "on" ]; then + sudo /home/admin/config.scripts/blitz.display.sh set-display hdmi + elif [ "${secondParameter}" == "off" ]; then + sudo /home/admin/config.scripts/blitz.display.sh set-display lcd + else + echo "error='unkown second parameter'" + exit 1 + fi + exit 0 +fi + +####################################### +# DISPLAY TYPED INSTALLS & UN-INSTALLS +# HDMI is the default - every added +# displayClass needs a install fuction +# and a uninstall function back to HDMI +####################################### + +function install_hdmi() { + echo "# nothing to install - hdmi is the default/clean mode" +} + +function uninstall_hdmi() { + echo "# nothing to uninstall - hdmi is the default/clean mode" +} + +function install_lcd() { + + if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then + + echo "# INSTALL 64bit LCD DRIVER" + + # hold bootloader + sudo apt-mark hold raspberrypi-bootloader + + # Downloading LCD Driver from Github + cd /home/admin/ + sudo -u admin git clone https://github.com/tux1c/wavesharelcd-64bit-rpi.git + sudo -u admin chmod -R 755 wavesharelcd-64bit-rpi + sudo -u admin chown -R admin:admin wavesharelcd-64bit-rpi + cd /home/admin/wavesharelcd-64bit-rpi + sudo -u admin git reset --hard 5a206a7 || exit 1 + + # customized from https://github.com/tux1c/wavesharelcd-64bit-rpi/blob/master/install.sh + # prepare X11 + sudo mkdir -p /etc/X11/xorg.conf.d + sudo mv /etc/X11/xorg.conf.d/40-libinput.conf /home/admin/wavesharelcd-64bit-rpi/40-libinput.conf 2>/dev/null + sudo cp -rf ./99-calibration.conf /etc/X11/xorg.conf.d/99-calibration.conf + # sudo cp -rf ./99-fbturbo.conf /etc/X11/xorg.conf.d/99-fbturbo.conf # there is no such file + + # add waveshare mod + sudo cp ./waveshare35a.dtbo /boot/overlays/ + + # modify /boot/config.txt + sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt + echo "hdmi_force_hotplug=1" >> /boot/config.txt + sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt + # echo "dtparam=i2c_arm=on" >> /boot/config.txt --> this is to be called I2C errors - see: https://github.com/rootzoll/raspiblitz/issues/1058#issuecomment-739517713 + # don't enable SPI and UART ports by default + # echo "dtparam=spi=on" >> /boot/config.txt + # echo "enable_uart=1" >> /boot/config.txt + sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt + echo "dtoverlay=waveshare35a:rotate=90" >> /boot/config.txt + + # modify cmdline.txt + modification="dwc_otg.lpm_enable=0 quiet fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo" + containsModification=$(sudo grep -c "${modification}" /boot/cmdline.txt) + if [ ${containsModification} -eq 0 ]; then + echo "# adding modification to /boot/cmdline.txt" + cmdlineContent=$(sudo cat /boot/cmdline.txt) + echo "${cmdlineContent} ${modification}" > /boot/cmdline.txt + else + echo "# /boot/cmdline.txt already contains modification" + fi + containsModification=$(sudo grep -c "${modification}" /boot/cmdline.txt) + if [ ${containsModification} -eq 0 ]; then + echo "# FAIL: was not able to mofify /boot/cmdline.txt" + echo "err='ended unclear state'" + exit 1 + fi + + # touch screen calibration + apt-get install -y xserver-xorg-input-evdev + cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf + # TODO manual touchscreen calibration option + # https://github.com/tux1c/wavesharelcd-64bit-rpi#adapting-guide-to-other-lcds + + # set font that fits the LCD screen + # https://github.com/rootzoll/raspiblitz/issues/244#issuecomment-476713706 + # there can be a different font for different types of LCDs with using the displayType parameter in the future + sudo setfont /usr/share/consolefonts/Uni3-TerminusBold16.psf.gz + + echo "# OK install of LCD done ... reboot needed" + + else + echo "err='baseimage not supported'" + exit 1 + fi + +} + +function uninstall_lcd() { + + if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then + + echo "# UNINSTALL 64bit LCD DRIVER" + + # hold bootloader + sudo apt-mark hold raspberrypi-bootloader + + # make sure xinput-calibrator is installed + sudo apt-get install -y xinput-calibrator + + # remove modifications of config.txt + sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt + sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt + echo "dtoverlay=pi3-disable-bt" >> /boot/config.txt + echo "dtoverlay=disable-bt" >> /boot/config.txt + + # remove modification of cmdline.txt + sudo sed -i "s/ dwc_otg.lpm_enable=0 quiet fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo//g" /boot/cmdline.txt + + # un-prepare X11 + sudo mv /home/admin/wavesharelcd-64bit-rpi/40-libinput.conf /etc/X11/xorg.conf.d/40-libinput.conf 2>/dev/null + sudo rm -rf /etc/X11/xorg.conf.d/99-calibration.conf + + # remove github code of LCD drivers + sudo rm -r /home/admin/wavesharelcd-64bit-rpi + + echo "# OK uninstall LCD done ... reboot needed" + + else + echo "err='baseimage not supported'" + exit 1 + fi +} + +# not being used - can be deleted after mid 2021 +function install_lcd_legacy() { + + if [ "${baseimage}" = "raspbian" ] || [ "${baseimage}" = "dietpi" ]; then + echo "*** 32bit LCD DRIVER ***" + echo "--> Downloading LCD Driver from Github" + cd /home/admin/ + sudo -u admin git clone https://github.com/MrYacha/LCD-show.git + sudo -u admin chmod -R 755 LCD-show + sudo -u admin chown -R admin:admin LCD-show + cd LCD-show/ + sudo -u admin git reset --hard 53dd0bf || exit 1 + # install xinput calibrator package + echo "--> install xinput calibrator package" + sudo apt install -y libxi6 + sudo dpkg -i xinput-calibrator_0.7.5-1_armhf.deb + + if [ "${baseimage}" = "dietpi" ]; then + echo "--> dietpi preparations" + sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf + sudo mkdir /etc/X11/xorg.conf.d + sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/ + sudo cp ./usr/tft35a-overlay.dtb /boot/overlays/tft35a.dtbo + sudo cp -rf ./usr/99-calibration.conf-35 /etc/X11/xorg.conf.d/99-calibration.conf + sudo cp -rf ./usr/99-fbturbo.conf /usr/share/X11/xorg.conf.d/ + sudo cp ./usr/cmdline.txt /DietPi/ + sudo cp ./usr/inittab /etc/ + sudo cp ./boot/config-35.txt /DietPi/config.txt + # make LCD screen rotation correct + sudo sed -i "s/dtoverlay=tft35a/dtoverlay=tft35a:rotate=270/" /DietPi/config.txt + fi + elif [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then + echo "*** 64bit LCD DRIVER ***" + echo "--> Downloading LCD Driver from Github" + cd /home/admin/ + sudo -u admin git clone https://github.com/tux1c/wavesharelcd-64bit-rpi.git + sudo -u admin chmod -R 755 wavesharelcd-64bit-rpi + sudo -u admin chown -R admin:admin wavesharelcd-64bit-rpi + cd /home/admin/wavesharelcd-64bit-rpi + sudo -u admin git reset --hard 5a206a7 || exit 1 + + # from https://github.com/tux1c/wavesharelcd-64bit-rpi/blob/master/install.sh + # prepare X11 + sudo rm -rf /etc/X11/xorg.conf.d/40-libinput.conf + sudo mkdir -p /etc/X11/xorg.conf.d + sudo cp -rf ./99-calibration.conf /etc/X11/xorg.conf.d/99-calibration.conf + # sudo cp -rf ./99-fbturbo.conf /etc/X11/xorg.conf.d/99-fbturbo.conf # there is no such file + + # add waveshare mod + sudo cp ./waveshare35a.dtbo /boot/overlays/ + + # modify /boot/config.txt + sudo sed -i "s/^hdmi_force_hotplug=.*//g" /boot/config.txt + echo "hdmi_force_hotplug=1" >> /boot/config.txt + sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt + echo "dtparam=i2c_arm=on" >> /boot/config.txt + # don't enable SPI and UART ports by default + # echo "dtparam=spi=on" >> /boot/config.txt + # echo "enable_uart=1" >> /boot/config.txt + sudo sed -i "s/^dtoverlay=.*//g" /boot/config.txt + echo "dtoverlay=waveshare35a:rotate=90" >> /boot/config.txt + + # use modified cmdline.txt + sudo cp ./cmdline.txt /boot/ + + # touch screen calibration + apt-get install -y xserver-xorg-input-evdev + cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf + # TODO manual touchscreen calibration option + # https://github.com/tux1c/wavesharelcd-64bit-rpi#adapting-guide-to-other-lcds + fi + + # activate LCD and trigger reboot + # dont do this on dietpi to allow for automatic build + if [ "${baseimage}" = "raspbian" ]; then + echo "Installing 32-bit LCD drivers ..." + sudo chmod +x -R /home/admin/LCD-show + cd /home/admin/LCD-show/ + sudo apt-mark hold raspberrypi-bootloader + sudo ./LCD35-show + elif [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then + echo "Installing 64-bit LCD drivers ..." + sudo chmod +x -R /home/admin/wavesharelcd-64bit-rpi + cd /home/admin/wavesharelcd-64bit-rpi + sudo apt-mark hold raspberrypi-bootloader + sudo ./install.sh + else + echo "Use 'sudo reboot' to restart manually." + fi + +} + +function install_headless() { + if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]|| [ "${baseimage}" = "debian_rpi64" ]; then + modificationExists=$(sudo cat /etc/systemd/system/getty@tty1.service.d/autologin.conf | grep -c "autologin pi") + if [ "${modificationExists}" == "1" ]; then + echo "# deactivating auto-login of pi user" + # set Raspi to deactivate auto-login (will delete /etc/systemd/system/getty@tty1.service.d/autologin.conf) + sudo raspi-config nonint do_boot_behaviour B1 + else + echo "# auto-login of pi user is already deactivated" + fi + else + echo "err='baseimage not supported'" + exit 1 + fi +} + +function uninstall_headless() { + if [ "${baseimage}" = "raspbian" ]||[ "${baseimage}" = "raspios_arm64" ]|| [ "${baseimage}" = "debian_rpi64" ]; then + modificationExists=$(sudo cat /etc/systemd/system/getty@tty1.service.d/autologin.conf | grep -c "autologin pi") + if [ "${modificationExists}" == "0" ]; then + echo "# activating auto-login of pi user again" + # set Raspi to boot up automatically with user pi (for the LCD) + # https://www.raspberrypi.org/forums/viewtopic.php?t=21632 + sudo raspi-config nonint do_boot_behaviour B2 + sudo bash -c "echo '[Service]' >> /etc/systemd/system/getty@tty1.service.d/autologin.conf" + sudo bash -c "echo 'ExecStart=' >> /etc/systemd/system/getty@tty1.service.d/autologin.conf" + sudo bash -c "echo 'ExecStart=-/sbin/agetty --autologin pi --noclear %I 38400 linux' >> /etc/systemd/system/getty@tty1.service.d/autologin.conf" + else + echo "# auto-login of pi user already active" + fi + else + echo "err='baseimage not supported'" + exit 1 + fi +} + +function prepareDisplayClassEntryRaspiblitzConf() { + # check if file exists / hdd is mounted + if [ -f "/mnt/hdd/raspiblitz.conf" ]; then + echo "file does exists" + entryExists=$(grep -c "displayClass=" /mnt/hdd/raspiblitz.conf) + if [ ${entryExists} -eq 0 ]; then + echo "displayClass=${displayClass}" >> /mnt/hdd/raspiblitz.conf + fi + else + echo "# /mnt/hdd/raspiblitz.conf does not exists (yet) - change is just part of raspiblitz.info" + fi +} + +################### +# SET DISPLAY TYPE +################### + +if [ "${command}" == "set-display" ]; then + + paramDisplayClass=$2 + paramDisplayType=$3 + echo "# blitz.display.sh set-display ${paramDisplayClass} ${paramDisplayType}" + + # check if started with sudo + if [ "$EUID" -ne 0 ]; then + echo "error='missing sudo'" + exit 1 + fi + + if [ "${paramDisplayClass}" == "" ]; then + echo "err='missing parameter'" + exit 1 + elif [ "${paramDisplayClass}" == "${displayClass}" ]; then + + # normally dont make any changes here - but it can be the case that this called by recover/update process + # where raspiblitz.info (base image) raspiblitz.conf (user config) have different values - check fo this case: + confAndInfoValueIsSame=$(sudo cat /home/admin/raspiblitz.info | grep -c "displayClass=${paramDisplayClass}}") + if [ "${confAndInfoValueIsSame}" == "0" ]; then + echo "# raspiblitz.info is different from raspiblitz.conf --> enforcing ${displayClass} for both" + source /home/admin/raspiblitz.info + # continue with the raspiblitz.info value of displayClass as actual state (not the overwritten one from raspiblitz.conf) + else + echo "# raspiblitz.info (AND raspiblitz.conf) already running ${displayClass} - no need for change" + exit 1 + fi + fi + if [ "${paramDisplayClass}" == "hdmi" ] || [ "${paramDisplayClass}" == "lcd" ] || [ "${paramDisplayClass}" == "headless" ]; then + + # uninstall old state + uninstall_$displayClass + + # install new state + install_$paramDisplayClass + + else + echo "err='unknown parameter'" + exit 1 + fi + + # mark new display class in configs + prepareDisplayClassEntryRaspiblitzConf + sudo sed -i "s/^displayClass=.*/displayClass=${paramDisplayClass}/g" /home/admin/raspiblitz.info + sudo sed -i "s/^displayClass=.*/displayClass=${paramDisplayClass}/g" /mnt/hdd/raspiblitz.conf 2>/dev/null + exit 0 + +fi + +# unknown command +echo "error='unkown command'" +exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.gpio.py b/home.admin/config.scripts/blitz.gpio.py new file mode 100644 index 000000000..ea1e75d65 --- /dev/null +++ b/home.admin/config.scripts/blitz.gpio.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys +import RPi.GPIO as GPIO + +if len(sys.argv) <= 2 or sys.argv[1] in ["-h", "--help", "help"]: + print ("# IMPORTANT: call with SUDO") + print ("# read inputs on raspberryPi GPIO pins") + print ("# blitz.gpio.py in [pinnumber]") + print ("err='missing parameters'") + sys.exit(1) + +if sys.argv[2].isdigit() and int(sys.argv[2])>0 and int(sys.argv[2])<=40: + GPIO.setmode(GPIO.BCM) + GPIO.setup(int(sys.argv[2]),GPIO.IN) + print ("pinValue", end="=") + print (GPIO.input(int(sys.argv[2]))) + GPIO.cleanup() +else: + print ("err='not a valid pin number between 1 and 40'") + sys.exit(1) \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.lcd.sh b/home.admin/config.scripts/blitz.lcd.sh deleted file mode 100755 index c8a4d62c0..000000000 --- a/home.admin/config.scripts/blitz.lcd.sh +++ /dev/null @@ -1,284 +0,0 @@ -#!/bin/bash - -# command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# make changes to the LCD screen" - echo "# blitz.lcd.sh check-repair" - echo "# blitz.lcd.sh rotate [on|off]" - echo "# blitz.lcd.sh image [path]" - echo "# blitz.lcd.sh qr [datastring]" - echo "# blitz.lcd.sh qr-console [datastring]" - echo "# blitz.lcd.sh hide" - echo "# blitz.lcd.sh hdmi [on|off]" - exit 1 -fi - -# load config -source /home/admin/raspiblitz.info 2>/dev/null -source /mnt/hdd/raspiblitz.conf 2>/dev/null - -# Make sure needed packages are installed -if [ $(sudo dpkg-query -l | grep "ii fbi" | wc -l) = 0 ]; then - sudo apt-get install fbi -y > /dev/null -fi -if [ $(sudo dpkg-query -l | grep "ii qrencode" | wc -l) = 0 ]; then - sudo apt-get install qrencode -y > /dev/null -fi - -# 1. Parameter: lcd command -command=$1 - -# check if its updated kernel version of v1.6 base image -oldKernel=$(uname -srm | cut -d ' ' -f2 | cut -d '-' -f1 | grep -c '4.19.118') -oldDrivers=$(sudo cat /home/admin/LCD-show/.git/config 2>/dev/null | grep -c 'github.com/goodtft/LCD') - -# check if LCD (/dev/fb1) or HDMI (/dev/fb0) -# see https://github.com/rootzoll/raspiblitz/pull/1580 -lcdExists=$(sudo ls /dev/fb1 2>/dev/null | grep -c "/dev/fb1") - -################### -# CHECK-REPAIR -# make sure that LCD drivers match linux kernel -# see issue: https://github.com/rootzoll/raspiblitz/pull/1490 -################### - -if [ "${command}" == "check-repair" ]; then - echo "# blitz.lcd.sh check-repair" - if [ ${oldKernel} -eq 1 ]; then - echo "# --> old kernel detected - no need to update LCD drivers." - else - echo "# --> new kernel detected - checking if LCD driver needs update ..." - if [ ${oldDrivers} -eq 1 ]; then - echo "# --> old LCD driver detected - starting update ..." - sudo rm -rf /home/admin/LCD-show - cd /home/admin - sudo -u admin git clone https://github.com/MrYacha/LCD-show.git - sudo -u admin chmod -R 755 LCD-show - sudo -u admin chown -R admin:admin LCD-show - cd /home/admin/LCD-show - sudo -u admin git reset --hard b012c487669afd3e997fc63fcc097d45a5a6a34e - - echo "# --> correcting rotate setting" - if [ "${lcdrotate}" == "on" ]; then - sudo sed -i "s/^dtoverlay=.*/dtoverlay=tft35a:rotate=90/g" /boot/config.txt - else - sudo sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=270/g" /boot/config.txt - fi - echo "# --> restart to acrivate new driver" - chmod +x ./LCD35-show - sudo ./LCD35-show - sudo shutdown -r now - else - echo "# --> new LCD driver detected - no need to update LCD drivers." - fi - exit - fi - -################### -# ROTATE -# see issue: https://github.com/rootzoll/raspiblitz/issues/681 -################### - -elif [ "${command}" == "rotate" ]; then - - # TURN ROTATE ON (the new default) - if [ "$2" = "1" ] || [ "$2" = "on" ]; then - - echo "# Turn ON: LCD ROTATE" - - # add default 'lcdrotate' raspiblitz.conf if needed - if [ ${#lcdrotate} -eq 0 ]; then - echo "lcdrotate=0" >> /mnt/hdd/raspiblitz.conf - fi - - if [ ${oldDrivers} -eq 1 ]; then - sudo sed -i "s/^dtoverlay=.*/dtoverlay=tft35a:rotate=90/g" /boot/config.txt - # if touchscreen is on - if [ "${touchscreen}" = "1" ]; then - echo "Also rotate touchscreen ..." - cat << EOF | sudo tee /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null -Section "InputClass" - Identifier "libinput touchscreen catchall" - MatchIsTouchscreen "on" - Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection -EOF - fi - else - sudo sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=90/g" /boot/config.txt - # delete possible touchscreen rotate - sudo rm /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null - fi - sudo sed -i "s/^lcdrotate=.*/lcdrotate=1/g" /mnt/hdd/raspiblitz.conf - - echo "# OK - a restart is needed: sudo shutdown -r now" - - # TURN ROTATE OFF - elif [ "$2" = "0" ] || [ "$2" = "off" ]; then - - echo "#Turn OFF: LCD ROTATE" - - if [ ${oldDrivers} -eq 1 ]; then - sudo sed -i "s/^dtoverlay=.*/dtoverlay=tft35a:rotate=270/g" /boot/config.txt - - # delete possible touchscreen rotate - sudo rm /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null - - else - sudo sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=270/g" /boot/config.txt - - # if touchscreen is on - if [ "${touchscreen}" = "1" ]; then - echo "Also rotate touchscreen ..." - cat << EOF | sudo tee /etc/X11/xorg.conf.d/40-libinput.conf >/dev/null -Section "InputClass" - Identifier "libinput touchscreen catchall" - MatchIsTouchscreen "on" - Option "CalibrationMatrix" "0 1 0 -1 0 1 0 0 1" - MatchDevicePath "/dev/input/event*" - Driver "libinput" -EndSection -EOF - fi - - fi - sudo sed -i "s/^lcdrotate=.*/lcdrotate=0/g" /mnt/hdd/raspiblitz.conf - - - echo "OK - a restart is needed: sudo shutdown -r now" - - else - echo "error='missing second parameter - see help'" - exit 1 - fi - exit 0 -fi - -################### -# IMAGE -################### - -if [ "${command}" == "image" ]; then - - imagePath=$2 - if [ ${#imagePath} -eq 0 ]; then - echo "error='missing second parameter - see help'" - exit 1 - else - # test the image path - if file exists - if [ -f "$imagePath" ]; then - echo "# OK - file exists: ${imagePath}" - else - echo "error='file does not exist'" - exit 1 - fi - fi - - # see https://github.com/rootzoll/raspiblitz/pull/1580 - if [ ${lcdExists} -eq 1 ] ; then - # LCD - sudo fbi -a -T 1 -d /dev/fb1 --noverbose ${imagePath} 2> /dev/null - else - # HDMI - sudo fbi -a -T 1 -d /dev/fb0 --noverbose ${imagePath} 2> /dev/null - fi - exit 0 -fi - - -################### -# QR CODE -################### - -if [ "${command}" == "qr" ]; then - - datastring=$2 - if [ ${#datastring} -eq 0 ]; then - echo "error='missing second parameter - see help'" - exit 1 - fi - - qrencode -l L -o /home/admin/qr.png "${datastring}" > /dev/null - # see https://github.com/rootzoll/raspiblitz/pull/1580 - if [ ${lcdExists} -eq 1 ] ; then - # LCD - sudo fbi -a -T 1 -d /dev/fb1 --noverbose /home/admin/qr.png 2> /dev/null - else - # HDMI - sudo fbi -a -T 1 -d /dev/fb0 --noverbose /home/admin/qr.png 2> /dev/null - fi - exit 0 -fi - -################### -# QR CODE KONSOLE -# fallback if no LCD is available -################### - -if [ "${command}" == "qr-console" ]; then - - datastring=$2 - if [ ${#datastring} -eq 0 ]; then - echo "error='missing second parameter - see help'" - exit 1 - fi - - whiptail --title "Get ready" --backtitle "QR-Code in Terminal Window" --msgbox "Make this terminal window as large as possible - fullscreen would be best. \n\nThe QR-Code might be too large for your display. In that case, shrink the letters by pressing the keys Ctrl and Minus (or Cmd and Minus if you are on a Mac) \n\nPRESS ENTER when you are ready to see the QR-code." 15 60 - - clear - qrencode -t ANSI256 ${datastring} - echo "(To shrink QR code: macOS press CMD- / LINUX press CTRL-) Press ENTER when finished." - read key - - clear - exit 0 -fi - -################### -# HIDE -################### - -if [ "${command}" == "hide" ]; then - sudo killall -3 fbi - shred -u /home/admin/qr.png 2> /dev/null - exit 0 -fi - -################### -# HDMI -# see https://github.com/rootzoll/raspiblitz/issues/767 -# see https://www.waveshare.com/wiki/3.5inch_RPi_LCD_%28A%29 -################### - -if [ "${command}" == "hdmi" ]; then - - # make sure that the config entry exists - - if [ $(cat /mnt/hdd/raspiblitz.conf 2>/dev/null| grep -c 'lcd2hdmi=') -eq 0 ]; then - echo "lcd2hdmi=off" >> /mnt/hdd/raspiblitz.conf 2>/dev/null - fi - - secondParameter=$2 - if [ "${secondParameter}" == "on" ]; then - sudo sed -i 's/^lcd2hdmi=.*/lcd2hdmi=on/g' /home/admin/raspiblitz.info 2>/dev/null - sudo sed -i 's/^lcd2hdmi=.*/lcd2hdmi=on/g' /mnt/hdd/raspiblitz.conf 2>/dev/null - cd /home/admin/LCD-show - ./LCD-hdmi - elif [ "${secondParameter}" == "off" ]; then - sudo sed -i 's/^lcd2hdmi=.*/lcd2hdmi=off/g' /home/admin/raspiblitz.info 2>/dev/null - sudo sed -i 's/^lcd2hdmi=.*/lcd2hdmi=off/g' /mnt/hdd/raspiblitz.conf 2>/dev/null - cd /home/admin/LCD-show - ./LCD35-show - else - echo "error='unkown second parameter'" - exit 1 - fi - exit 0 - -fi - -# unknown command -echo "error='unkown command'" -exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index 5a9d581aa..ee5aee064 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -89,7 +89,7 @@ migrate_raspiblitz_conf () { echo "network=bitcoin" >> /home/admin/raspiblitz.conf echo "chain=main" >> /home/admin/raspiblitz.conf echo "hostname=${nodename}" >> /home/admin/raspiblitz.conf - echo "lcd2hdmi=on" >> /home/admin/raspiblitz.conf + echo "displayClass=hdmi" >> /home/admin/raspiblitz.conf echo "lcdrotate=1" >> /home/admin/raspiblitz.conf echo "runBehindTor=on" >> /home/admin/raspiblitz.conf sudo mv /home/admin/raspiblitz.conf /mnt/hdd/raspiblitz.conf @@ -169,12 +169,16 @@ fi ######################## # MIGRATION from myNode +# see manual steps: https://btc21.de/bitcoin/raspiblitz-migration/ ######################## if [ "$1" = "migration-mynode" ]; then source <(sudo /home/admin/config.scripts/blitz.datadrive.sh status) + echo "IMPORTANT TODO -> take care about lnd wallet password - see: https://btc21.de/bitcoin/raspiblitz-migration/" + exit 1 + # can olny migrate unmonted data disks if [ "${isMounted}" == "1" ]; then echo "err='cannot migrate mounted drive'" diff --git a/home.admin/config.scripts/blitz.touchscreen.sh b/home.admin/config.scripts/blitz.touchscreen.sh index 255726756..793247dd8 100755 --- a/home.admin/config.scripts/blitz.touchscreen.sh +++ b/home.admin/config.scripts/blitz.touchscreen.sh @@ -155,8 +155,8 @@ if [ "$1" = "calibrate" ]; then # check that touchscreen is on if [ "${touchscreen}" == "1" ]; then echo "# calibrating touchscreen ..." - echo "error='not installed'" else + echo "error='not installed'" exit 1 fi diff --git a/home.admin/config.scripts/bonus.btc-rpc-explorer.sh b/home.admin/config.scripts/bonus.btc-rpc-explorer.sh index 7c4864682..358422621 100755 --- a/home.admin/config.scripts/bonus.btc-rpc-explorer.sh +++ b/home.admin/config.scripts/bonus.btc-rpc-explorer.sh @@ -38,7 +38,7 @@ This can take multiple hours. if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # TOR - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title " BTC-RPC-Explorer " --msgbox "Open in your local web browser & accept self-signed cert: https://${localip}:3021\n SHA1 Thumb/Fingerprint: @@ -47,7 +47,7 @@ Login is 'admin' with your Password B\n Hidden Service address for TOR Browser (QR see LCD): ${toraddress} " 16 67 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide else # IP + Domain diff --git a/home.admin/config.scripts/bonus.btcpayserver.sh b/home.admin/config.scripts/bonus.btcpayserver.sh index 292ece19a..48cf00832 100755 --- a/home.admin/config.scripts/bonus.btcpayserver.sh +++ b/home.admin/config.scripts/bonus.btcpayserver.sh @@ -122,7 +122,7 @@ port forwarding on router needs to be active & may change port" SHA1 ${sslFingerprintIP}" if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" text="${text}\n TOR Browser Hidden Service address (see the QR onLCD): ${toraddress}" @@ -149,7 +149,7 @@ MAINMENU > LNDCREDS > EXPORT > BTCPay Server" whiptail --title " BTCPay Server " --msgbox "${text}" 17 69 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide echo "# please wait ..." exit 0 fi diff --git a/home.admin/config.scripts/bonus.cryptoadvance-specter.sh b/home.admin/config.scripts/bonus.cryptoadvance-specter.sh index 5375722ad..fa09bc1a3 100755 --- a/home.admin/config.scripts/bonus.cryptoadvance-specter.sh +++ b/home.admin/config.scripts/bonus.cryptoadvance-specter.sh @@ -54,7 +54,7 @@ if [ "$1" = "menu" ]; then if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # TOR - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title " Cryptoadvance Specter " --msgbox "Open in your local web browser & accept self-signed cert: https://${localip}:25441 @@ -67,7 +67,7 @@ Hidden Service address for TOR Browser (QR see LCD): https://${toraddress} Unfortunately the camera is currently not usable via Tor, though. " 18 74 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide else # IP + Domain diff --git a/home.admin/config.scripts/bonus.electrs.sh b/home.admin/config.scripts/bonus.electrs.sh index 6219df66c..74f05c0a8 100755 --- a/home.admin/config.scripts/bonus.electrs.sh +++ b/home.admin/config.scripts/bonus.electrs.sh @@ -200,7 +200,7 @@ Check 'sudo nginx -t' for a detailed error message. echo echo "To connect through TOR open the Tor Browser and start with the options:" echo "electrum --oneserver --server ${TORaddress}:50002:s --proxy socks5:127.0.0.1:9150" - /home/admin/config.scripts/blitz.lcd.sh qr "${TORaddress}" + /home/admin/config.scripts/blitz.display.sh qr "${TORaddress}" fi echo echo "For more details check the RaspiBlitz README on ElectRS:" @@ -208,7 +208,7 @@ Check 'sudo nginx -t' for a detailed error message. echo echo "Press ENTER to get back to main menu." read key - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide ;; STATUS) sudo /home/admin/config.scripts/bonus.electrs.sh status diff --git a/home.admin/config.scripts/bonus.fullynoded.sh b/home.admin/config.scripts/bonus.fullynoded.sh index f56139c47..995c8a399 100755 --- a/home.admin/config.scripts/bonus.fullynoded.sh +++ b/home.admin/config.scripts/bonus.fullynoded.sh @@ -18,11 +18,11 @@ hiddenService=$(sudo cat /mnt/hdd/tor/bitcoin8332/hostname) quickConnect="btcstandup://$RPC_USER:$PASSWORD_B@$hiddenService:8332/?label=$hostname" echo "" echo "scan the QR Code with Fully Noded to connect to your node:" -/home/admin/config.scripts/blitz.lcd.sh qr "${quickConnect}" +/home/admin/config.scripts/blitz.display.sh qr "${quickConnect}" qrencode -t ANSI256 $quickConnect echo "Press ENTER to return to the menu" read key # clean up -/home/admin/config.scripts/blitz.lcd.sh hide +/home/admin/config.scripts/blitz.display.sh hide clear \ No newline at end of file diff --git a/home.admin/config.scripts/bonus.lit.sh b/home.admin/config.scripts/bonus.lit.sh index 46881aa0a..d6051f844 100644 --- a/home.admin/config.scripts/bonus.lit.sh +++ b/home.admin/config.scripts/bonus.lit.sh @@ -35,7 +35,7 @@ if [ "$1" = "menu" ]; then if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # Info with TOR - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title " Lightning Terminal " --msgbox "Open in your local web browser & accept self-signed cert: https://${localip}:8443\n SHA1 Thumb/Fingerprint: @@ -46,7 +46,7 @@ https://${toraddress}\n For the command line switch to 'lit' user with: 'sudo su - lit' use the commands: 'lncli', 'lit-loop', 'lit-pool' and 'lit-frcli'. " 19 74 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide else # Info without TOR whiptail --title " Lightning Terminal " --msgbox "Open in your local web browser & accept self-signed cert: diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index 305fc084e..9e205a4d3 100755 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -45,7 +45,7 @@ port forwarding on router needs to be active & may change port" SHA1 ${sslFingerprintIP}" if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" text="${text}\n TOR Browser Hidden Service address (QR see LCD): ${toraddress}" @@ -68,7 +68,7 @@ consider adding a IP2TOR Bridge (MAINMENU > SUBSCRIBE)." whiptail --title " LNbits " --msgbox "${text}" 15 69 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide echo "please wait ..." exit 0 fi diff --git a/home.admin/config.scripts/bonus.lndconnect.sh b/home.admin/config.scripts/bonus.lndconnect.sh index cd175fed7..f96a1dae4 100755 --- a/home.admin/config.scripts/bonus.lndconnect.sh +++ b/home.admin/config.scripts/bonus.lndconnect.sh @@ -189,7 +189,7 @@ fi lndconnect="lndconnect://${host}:${port}${macaroonParameter}${certParameter}" # display qr code image on LCD -/home/admin/config.scripts/blitz.lcd.sh qr "${lndconnect}" +/home/admin/config.scripts/blitz.display.sh qr "${lndconnect}" # show pairing info dialog msg="" @@ -216,7 +216,7 @@ if [ $? -eq 1 ]; then fi # clean up -/home/admin/config.scripts/blitz.lcd.sh hide +/home/admin/config.scripts/blitz.display.sh hide echo "------------------------------" echo "If the connection was not working:" diff --git a/home.admin/config.scripts/bonus.mempool.sh b/home.admin/config.scripts/bonus.mempool.sh index 0c62025ef..b8e73439f 100755 --- a/home.admin/config.scripts/bonus.mempool.sh +++ b/home.admin/config.scripts/bonus.mempool.sh @@ -39,7 +39,7 @@ This can take multiple hours. if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # TOR - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title " Mempool " --msgbox "Open in your local web browser & accept self-signed cert: https://${localip}:4081\n SHA1 Thumb/Fingerprint: @@ -47,7 +47,7 @@ ${fingerprint}\n Hidden Service address for TOR Browser (QR see LCD): ${toraddress} " 16 67 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide else # IP + Domain diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index a1825ba58..5af1cae21 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -28,7 +28,7 @@ if [ "$1" = "menu" ]; then if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # Info with TOR - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title " Ride The Lightning (RTL) " --msgbox "Open in your local web browser & accept self-signed cert: https://${localip}:3001\n SHA1 Thumb/Fingerprint: @@ -36,7 +36,7 @@ ${fingerprint}\n Use your Password B to login.\n Hidden Service address for TOR Browser (QRcode on LCD):\n${toraddress} " 16 67 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide else # Info without TOR whiptail --title " Ride The Lightning (RTL) " --msgbox "Open in your local web browser & accept self-signed cert: diff --git a/home.admin/config.scripts/bonus.sphinxrelay.sh b/home.admin/config.scripts/bonus.sphinxrelay.sh index 2cd2400ed..24d810a98 100755 --- a/home.admin/config.scripts/bonus.sphinxrelay.sh +++ b/home.admin/config.scripts/bonus.sphinxrelay.sh @@ -133,7 +133,7 @@ ${publicURL}" fi # show qr code on LCD & console - /home/admin/config.scripts/blitz.lcd.sh qr "${connectionCode}" + /home/admin/config.scripts/blitz.display.sh qr "${connectionCode}" whiptail --title " Connect App with Sphinx Relay " \ --yes-button "Done" \ --no-button "Show QR Code" \ @@ -149,7 +149,7 @@ ${extraPairInfo}" 16 70 read key fi - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide exit 0 fi diff --git a/home.admin/config.scripts/bonus.thunderhub.sh b/home.admin/config.scripts/bonus.thunderhub.sh index ca997f8d4..7744a846a 100755 --- a/home.admin/config.scripts/bonus.thunderhub.sh +++ b/home.admin/config.scripts/bonus.thunderhub.sh @@ -29,7 +29,7 @@ if [ "$1" = "menu" ]; then if [ "${runBehindTor}" = "on" ] && [ ${#toraddress} -gt 0 ]; then # Info with TOR - /home/admin/config.scripts/blitz.lcd.sh qr "${toraddress}" + /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title " ThunderHub " --msgbox "Open in your local web browser & accept self-signed cert: https://${localip}:3011\n SHA1 Thumb/Fingerprint: @@ -37,7 +37,7 @@ ${fingerprint}\n Use your Password B to login.\n Hidden Service address for TOR Browser (see LCD for QR):\n${toraddress} " 16 67 - /home/admin/config.scripts/blitz.lcd.sh hide + /home/admin/config.scripts/blitz.display.sh hide else # Info without TOR whiptail --title " ThunderHub " --msgbox "Open in your local web browser & accept self-signed cert: