Can someone else with KDE test? I think it has something to do with it, and somehow silently replacing Xdialog with kdialog, and that does not work, the syntax is very different.
Cause i do not see how the example of Maybl8 can change anything, the difference is one loop and one invalid option --keep-title.(which does not work with pure dialog)
which: no Xdialog in (~/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
Xdialog dependency is not found, please install with: sudo pacman -S xdialog
After installing xdialog (using first option as it is no transaction);
pacman-mirrors
Pacman-mirrors version 4.24.0
Local mirror status for unstable branch
[... ~ mirrors ~ ...]
So seems fine, at least as far as launching, from what I could gather.
I just stumbled across the fact, that i have to change three places to set my device for smartctrl command.
Assuming that $options is set correctly, i removed the case-block and read the command from the array and use eval. (i think, since there is no direct user-input involved, it’s ok)
Version 11.04.2024-2 with loop and single place to edit
#!/bin/bash
# Creator: Todor Uzunov
# License: GNU - free like free speech and free beer for everybody!
# Version: 11.04.2024-2
# Changelog: try to find dependencies and compatibility mode
MODE=Xdialog
# check if dependencies are present and fall back to dialog
if ! [[ "$(which dialog)" =~ (dialog) ]] &>/dev/null; then
if ! [[ "$(which Xdialog)" =~ (Xdialog) ]] &>/dev/null; then
echo "Xdialog dependency is not found, please install with: sudo pacman -S xdialog"
echo "Alternatively for TUI version install dialog: sudo pacman -S xdialog"
exit 1
fi
if ! [[ "$(which /usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so)" =~ (/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so) ]] &>/dev/null; then
echo "Libmurrine dependency is not found, please install with: sudo pacman -S gtk-engine-murrine"
echo "Alternatively for TUI version install dialog: sudo pacman -S xdialog"
exit 1
fi
else
if ! [[ "$(which Xdialog)" =~ (Xdialog) ]]; then
MODE=dialog
if [[ "$(which notify-send)" =~ (notify-send) ]]; then notify-send "Xdialog dependency is not found, please install with" "sudo pacman -S xdialog"; fi
fi
if ! [[ "$(which /usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so)" =~ (/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so) ]]; then
MODE=dialog
if [[ "$(which notify-send)" =~ (notify-send) ]]; then notify-send "libmurrine dependency is not found, please install with" "sudo pacman -S gtk-engine-murrine"; fi
fi
fi
OPTIONS=(
1 "Mirror Sync status and branch || pacman-mirrors"
2 "Refresh the mirror list || sudo pacman-mirrors -f5" # sudo pacman-mirrors --country Germany --api --protocol https
3 "Update all without AUR || sudo pacman -Syu"
4 "Download all updates for offline install later || sudo pacman -Syuw"
5 "Force refresh database and update || sudo pacman -Syyu"
6 "Check which dependencies are already installed (paste packagename) || for i in \$(expac -S '%D' \$pkg); do pacman -Q \$i"
7 "Run pacdiff with Meld to compare changed configs || DIFFPROG=meld pacdiff -s" # pamac install meld
8 "List foreign (AUR) packages || pacman -Qm"
9 "List orphaned packages || pacman -Qdt"
10 "Check for updates of AUR with YAY, do not update || yay -Qua" # pamac install yay
11 "Update only AUR packages with YAY || yay -Sua" # pamac install yay
12 "Pamac update AUR packages || pamac update --aur"
13 "Remove orphaned packages || sudo pacman -Rsu ..."
14 "Clean Pacman cache || sudo pacman -Scc"
15 "Trim the root of the SSD || sudo fstrim -v /"
16 "S.M.A.R.T. status of the disk and write cycles || sudo smartctl --all /dev/sdc" # smartctl --scan
17 "Show journal errors from current boot || journalctl -b -p3 --no-pager"
18 "Show journal errors from previous boot || journalctl -b -1 -p3 --no-pager"
19 "Dmesg || sudo dmesg"
20 "Check for coredumps || coredumpctl"
21 "Run Wavemonitor to check Wifi channel and strength with wavemon || wavemon" # pamac install wavemon
22 "Read sensors || sensors"
23 "Gather system info || inxi -zv8"
24 "Update database for locate || sudo updatedb"
25 "Temporary disable Ideapad battery conservation mode || sudo conservation_mode.sh 0" # pamac build conservation_mode
26 "Show hidden spaceeaters above 100M in HOME || du -sh -t +100M ~/.cache/* ~/.config/* ~/.local/share/*"
27 "Show journal size || journalctl --disk-usage"
28 "Cut journal to 2 weeks || sudo journalctl --vacuum-time=2weeks"
29 "List coredumps on disk and used space || du -sh /var/lib/systemd/coredump/"
30 "Clear coredumps on disk || sudo rm -f /var/lib/systemd/coredump/*"
31 "Show systemd bootlog only || journalctl -b -t systemd"
32 "Check for missing files from packages || sudo pacman -Qk 2>/dev/null | grep -v ' 0 missing files' "
33 "Which package owns an existing file (paste filepath) || read fileowner; pacman -Qo \$fileowner"
34 "Which (installed or not) package contains a file (paste filename) || read whogotit; sudo pacman -Fyx \$whogotit"
35 "Check for flatpak updates and update || flatpak update"
36 "Remove orphaned (unused) flatpak runtimes || flatpak uninstall --unused"
37 "Clean flatpak cache || sudo rm -rfv /var/tmp/flatpak-cache-*"
38 "Clean tmp bash history files and Totem stream cache || rm -f ~/.bash_history-*.tmp && rm -f ~/.cache/totem/stream-buffer/*"
39 "A 10-20 sec. cpu benchmark using bc to calculate PI || time echo \"scale=5000; 4*a(1)\" | bc -l > /dev/null" # pamac install bc
)
#if you prefer TUI or have compatibility issues just replace Xdialog with dialog in the line below
CHOICE='99'
while [[ $CHOICE != '' ]]; do
CHOICE=$($MODE --clear \
--no-shadow \
--scrollbar \
--column-separator "||" \
--separator "||" \
--backtitle "" \
--title "A Manjaro cheatsheet by Teo" \
--menu "" \
79 185 79 \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)
clear
# if we use a launcher shortcut with -launcher, pause before exit
#if [ "$1" == "-launcher" ]; then
if [[ $CHOICE != '' ]]; then
# get value from selected line
CHOICETEXT=${OPTIONS[(($CHOICE * 2 - 1))]}
# split to get command
CHOICECMD=${CHOICETEXT##*||}
echo "$CHOICECMD"
eval "$CHOICECMD"
read -n 1 -s -r -p "Press any key to return to menu.";
fi
done
echo "ended"
I tested it and it seems to work, but be carefull with destructive commands.
Another interesting suggestion. Has to be tested, if the splitting works correctly (one or two of the commands have escaped characters in the explanation and you take it as a command).
I will see it tomorrow or in the weekend.
Thanks for all the input and ideas and esp. @AlexBoldt i made a total rewrite. Not ideal because of eval (but well, this is never thought to be used on servers), but a lot better.
Removed is the tripling of everything, the --launcher argument, all runs now in an endless loop. Also, about a Dosen smaller refinements and nice side effects, for example with the loop sudo is remembered, commands are now more logically arranged, 1-2 strings are optimized, 1 command is removed, naming of the buttons instead of the generic “cancel”, separator between the commands, if dialog is used it does not leave a blue mess anymore, the pause screen has Q(uit) option, etc.
complete rewrite
#!/bin/bash
# Creator: Todor Uzunov
# License: GNU - free like free speech and free beer for everybody!
# Version: 12.04.2024
# major rewrite to get rid of the tripling of everything, endless loop to stay in menu, dosens of small improvements
MODE=Xdialog
# check if dependencies are present and fall back to dialog
if ! [[ "$(which dialog)" =~ (dialog) ]] &>/dev/null; then
if ! [[ "$(which Xdialog)" =~ (Xdialog) ]] &>/dev/null; then
echo "Xdialog dependency is not found, please install with: sudo pacman -S xdialog"
echo "Alternatively for TUI version install dialog: sudo pacman -S xdialog"
exit 1
fi
if ! [[ "$(which /usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so)" =~ (/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so) ]] &>/dev/null; then
echo "Libmurrine dependency is not found, please install with: sudo pacman -S gtk-engine-murrine"
echo "Alternatively for TUI version install dialog: sudo pacman -S xdialog"
exit 1
fi
else
if ! [[ "$(which Xdialog)" =~ (Xdialog) ]]; then
MODE=dialog
if [[ "$(which notify-send)" =~ (notify-send) ]]; then notify-send "Xdialog dependency is not found, please install with" "sudo pacman -S xdialog"; fi
fi
if ! [[ "$(which /usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so)" =~ (/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so) ]]; then
MODE=dialog
if [[ "$(which notify-send)" =~ (notify-send) ]]; then notify-send "libmurrine dependency is not found, please install with" "sudo pacman -S gtk-engine-murrine"; fi
fi
fi
OPTIONS=(
1 "Mirror Sync status and branch" "pacman-mirrors"
2 "Refresh the mirror list" "sudo pacman-mirrors -f5" # sudo pacman-mirrors --country Germany --api --protocol https
3 "Update all without AUR" "sudo pacman -Syu"
4 "Download all updates for offline install later" "sudo pacman -Syuw"
5 "Force refresh database and update (only for emergencies)" "sudo pacman -Syyu"
6 "Run pacdiff with Meld to compare changed configs" "DIFFPROG=meld pacdiff -s" # pamac install meld
7 "List foreign (AUR) packages" "pacman -Qm"
8 "List orphaned packages" "pacman -Qdt"
9 "Check for updates of AUR with YAY, do not update" "yay -Qua" # pamac install yay
10 "Update only AUR packages with YAY" "yay -Sua" # pamac install yay
11 "Pamac update AUR packages" "pamac update --aur"
12 "Remove orphaned packages" "sudo pacman -Rsu \$(pacman -Qtdq)"
13 "Clean Pacman cache" "sudo pacman -Scc"
14 "Show journal errors from current boot" "journalctl -b -p3 --no-pager"
15 "Show journal errors from previous boot" "journalctl -b -1 -p3 --no-pager"
16 "Show systemd bootlog only" "journalctl -b -t systemd"
17 "Show dmesg" "sudo dmesg"
18 "Check for coredumps" "coredumpctl"
19 "List coredumps on disk and used space" "du -sh /var/lib/systemd/coredump/"
20 "Clear coredumps on disk" "sudo rm -f /var/lib/systemd/coredump/*"
21 "Trim the root of the SSD" "sudo fstrim -v /"
22 "S.M.A.R.T. status of the disk and write cycles" "sudo smartctl --all /dev/nvme0" # smartctl --scan
23 "Run wavemonitor to check Wifi channel and strength with wavemon" "wavemon" # pamac install wavemon
24 "Read sensors" "sensors"
25 "Gather system info with inxi (filtered)" "inxi -zv8"
26 "Update database for locate" "sudo updatedb"
27 "Temporary disable Ideapad battery conservation mode" "sudo conservation_mode.sh 0" # pamac build conservation_mode
28 "Show hidden spaceeaters above 100M in HOME" "du -sh -t +100M ~/.cache/* ~/.config/* ~/.local/share/*"
29 "Show journal size" "journalctl --disk-usage"
30 "Cut journal to 2 weeks" "sudo journalctl --vacuum-time=2weeks"
31 "Check for missing files from packages" "sudo pacman -Qk 2>/dev/null | grep -v ' 0 missing files' "
32 "Which package owns an existing file (paste filepath)" "read fileowner; pacman -Qo \$fileowner"
33 "Which (installed or not) package contains a file (paste filename)" "read whogotit; sudo pacman -Fyx \$whogotit"
34 "Check for flatpak updates and update" "flatpak update"
35 "Remove orphaned (unused) flatpak runtimes" "flatpak uninstall --unused"
36 "Clean flatpak cache" "rm -rfv /var/tmp/flatpak-cache-*"
37 "Clean tmp bash history files and Totem stream cache" "rm -f ~/.bash_history-*.tmp && rm -f ~/.cache/totem/stream-buffer/*"
38 "A 10-20 sec. cpu benchmark using bc to calculate PI" "time echo \"scale=5000; 4*a(1)\" | bc -l > /dev/null" # pamac install bc
)
while true; do
CHOICE=$($MODE --clear \
--no-shadow \
--item-help \
--keep-tite \
--scrollbar \
--ok-label "Run" \
--cancel-label "Exit" \
--backtitle "" \
--title "A Manjaro cheatsheet by Teo" \
--menu "" \
78 120 0 \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)
#clear
[[ $CHOICE ]] || break
echo "${OPTIONS[$(($(($CHOICE*3))-1))]}"
eval "${OPTIONS[$(($(($CHOICE*3))-1))]}"
read -n 1 -s -r -p "Press any key to return to menu or q to exit." $REPLY;
echo ""
echo ""
echo "================================================="
echo ""
if [[ $REPLY == "q" ]]; then break; fi
done
I am very thankful because my bash skills are more or less non-existent. I actually tried to find alternative to eval but i could not make what i found as alternatives work (like using source<() or $() ) so i kept your code.
If the actual command is shown under the description as each line is focused, this script could also become a teaching tool as well as being a convenience.
That was exactly the point…i want to learn the commands over time. That is why it is shown in the help line above the run button when selecting, and then echoed once more at execution in terminal (both are technically unnecessary but good for learning)
I just added 3 more or less logically interconnected network tools.
If you notice high network traffic you can see which process is causing it with nethogs (has to be installed before that)…than you copy the name or pid of the culprit and paste it as input for ss to see where it connects…and you can then check with whois what exactly is an ip address
Version 3.7.24 :)
#!/bin/bash
# Creator: Todor Uzunov a.k.a. Teo
# License: GNU - free like free speech and free beer for everybody!
VERSION=03.07.2024
# Changelog: added generation of hashes for my separate boot verifier project; pacman -Qo; formatting
MODE=Xdialog
# check if dependencies are present and fall back to dialog. You can also change the variable manually above
if ! [[ "$(which dialog)" =~ (dialog) ]] &>/dev/null; then
if ! [[ "$(which Xdialog)" =~ (Xdialog) ]] &>/dev/null; then
echo "Xdialog dependency is not found, please install with: sudo pacman -S xdialog"
echo "Alternatively for TUI version install dialog: sudo pacman -S dialog"
exit 1
fi
if ! [[ "$(which /usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so)" =~ (/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so) ]] &>/dev/null; then
echo "Libmurrine dependency is not found, please install with: sudo pacman -S gtk-engine-murrine"
echo "Alternatively for TUI version install dialog: sudo pacman -S dialog"
exit 1
fi
else
if ! [[ "$(which Xdialog)" =~ (Xdialog) ]]; then
MODE=dialog
if [[ "$(which notify-send)" =~ (notify-send) ]]; then notify-send "If you want GUI you can install Xdialog with" "sudo pacman -S xdialog"; fi
fi
if ! [[ "$(which /usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so)" =~ (/usr/lib/gtk-2.0/2.10.0/engines/libmurrine.so) ]]; then
MODE=dialog
if [[ "$(which notify-send)" =~ (notify-send) ]]; then notify-send "If you want GUI you can install libmurrine with" "sudo pacman -S gtk-engine-murrine"; fi
fi
fi
OPTIONS=(
1 " Mirror Sync status and branch" "pacman-mirrors"
2 " Refresh the mirror list" "sudo pacman-mirrors -f" # sudo pacman-mirrors --country Germany --api --protocol https
3 " Update all without AUR" "sudo pacman -Syu"
4 " Download all updates for offline install later" "sudo pacman -Syuw"
5 " Force refresh database and update (only for emergencies)" "sudo pacman -Syyu"
6 " Run pacdiff with Meld to compare changed configs" "DIFFPROG=meld pacdiff -s" # pamac install meld
7 " List foreign (AUR) packages" "pacman -Qm"
8 " List orphaned packages" "pacman -Qdt"
9 " Check for updates of AUR with YAY, do not update" "yay -Qua" # pamac install yay
10 " Update only AUR packages with YAY" "yay -Sua" # pamac install yay
11 " Pamac update AUR packages" "pamac update --aur"
12 " Remove orphaned packages" "sudo pacman -Rsu \$(pacman -Qtdq)"
13 " Clean Pacman and Pamac cache" "sudo pacman -Scc"
14 " Show journal errors from current boot" "journalctl -b -p3 --no-pager"
15 " Show journal errors from previous boot" "journalctl -b -1 -p3 --no-pager"
16 " Show systemd bootlog only" "journalctl -b -t systemd"
17 " Show dmesg" "sudo dmesg"
18 " Check for coredumps" "coredumpctl"
19 " List coredumps on disk and used space" "du -sh /var/lib/systemd/coredump/"
20 " Clear coredumps on disk" "sudo rm -f /var/lib/systemd/coredump/*"
21 " Trim the root of the SSD" "sudo fstrim -v /"
22 " S.M.A.R.T. status of the disk and write cycles" "sudo smartctl --all /dev/nvme0" # smartctl --scan
23 " Run wavemonitor to check Wifi channel and strength with wavemon" "wavemon" # pamac install wavemon
24 " Read sensors every second, press CTRL-C to exit" "watch -e -n 1 sensors"
25 " Stress the CPU, useful for thermal or throttling tests, press CTRL-C to exit" "stress -c 16"
26 " Gather system info with inxi (filtered)" "inxi -zv8"
27 " Update database for locate" "sudo updatedb"
28 " Temporary disable Ideapad battery conservation mode" "sudo conservation_mode.sh 0" # pamac build conservation_mode
29 " Show hidden spaceeaters above 100M in HOME" "du -sh -t +100M ~/.cache/* ~/.config/* ~/.local/share/*"
30 " Use MAPARE to check if missing default packages" "bash <(curl -s https://gitlab.com/cscs/mapare/-/raw/main/mapare) -IP"
31 " Check for missing files from packages" "sudo pacman -Qk 2>/dev/null | grep -v ' 0 missing files' "
32 " Which package owns an existing file (paste filepath)" "read fileowner; pacman -Qo \$fileowner"
33 " Which (installed or not) package contains a file (paste filename, online check)" "read whogotit; sudo pacman -Fyx \$whogotit"
34 " Which (installed) package contains a file or directory (paste filename or path, offline check)" "read whogotit; pacman -Qo \$whogotit"
35 " Check for flatpak updates and update" "flatpak update"
36 " Remove orphaned (unused) flatpak runtimes" "flatpak uninstall --unused"
37 " Clean flatpak cache" "rm -rfv /var/tmp/flatpak-cache-*"
38 " Clean tmp bash history files and Totem stream cache" "rm -f ~/.bash_history-*.tmp && rm -f ~/.cache/totem/stream-buffer/*"
39 " A 10-20 sec. cpu benchmark using bc to calculate PI" "time echo \"scale=5000; 4*a(1)\" | bc -l > /dev/null" # pamac install bc
40 " Show journal size" "journalctl --disk-usage"
41 " Cut journal to 2 weeks" "sudo journalctl --vacuum-time=2weeks"
42 " Display the apps making most network traffic. Exit with q" "sudo nethogs" # pamac install nethogs
43 " Show all network connections of an app (paste name or pid)" "read nethog; ss -tuap | grep \$nethog"
44 " Whois (paste ip address)" "read ipaddress; whois \$ipaddress"
45 " Regenerate hashes for the boot files after update" "sudo /root/verifier.sh -update" # requires the extra script
)
while true; do
CHOICE=$($MODE --clear \
--no-shadow \
--no-tags \
--item-help \
--keep-tite \
--scrollbar \
--ok-label "Run" \
--cancel-label "Exit" \
--backtitle "" \
--title "A Manjaro cheatsheet by Teo, version $VERSION" \
--menu "Press Enter to run a command from the list or close the window to cancel:" \
79 125 0 \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)
[[ $CHOICE ]] || break
echo "${OPTIONS[$(($(($CHOICE*3))-1))]}"
eval "${OPTIONS[$(($(($CHOICE*3))-1))]}"
read -n 1 -s -r -p "Press any key to return to menu or q to exit." $REPLY;
echo ""
echo ""
echo "================================================="
echo ""
if [[ $REPLY == "q" ]]; then break; fi
done
I’m getting this error when selecting something from the menu:
demo@Manjaro scripts]$ ./mymenu.sh
./mymenu.sh: line 92:
** DEBUG (recursed) **: Name com.canonical.AppMenu.Registrar on the session bus is owned by :1.13
1*3: syntax error: operand expected (error token is "** DEBUG (recursed) **: Name com.canonical.AppMenu.Registrar on the session bus is owned by :1.13
1*3")
[
No idea. About the syntax, maybe there is a better version, but i tested it with bash and zsh on the stable branch and it works for now.
You can try to remove the quotes from
For me it works both ways, maybe it makes a difference in your specific system.
But you definitely do not run an entirely “stock” system, as far as i googled that error message. It should not be debugging anything and appmenu is also not a standard component… maybe you have installed it from aur, or maybe you had gnome before and you are now running kde with the same user profile? Or you have installed something monitor/debugger/sandboxing related…i do not know but this error is strange.
Yes I do not have a stock system and I am on unstable branch. I Didn’t know the menu would only work with “stock” System. I may have misread that or didn’t read that.
Thanks