su
export PATH=$PATH:/usr/sbin/
export PATH=$PATH:/sbin/
-----------
su -l
apt install sudo
adduser <user> sudo
logout
logout
login
PHP
sudo apt -y install php php-common
sudo apt -y install php-cli php-fpm php-json php-pdo php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear
sudo apt install php-[extname]
# Last ned setup-scriptet
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
# Kjør scriptet (setter opp repo og GPG-nøkler automatisk)
sudo sh webmin-setup-repo.sh
# Installer Webmin
sudo apt-get install webmin --install-recommends
wget -qO- https://repo.vivaldi.com/archive/linux_signing_key.pub | sudo tee /usr/share/keyrings/vivaldi-browser.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/vivaldi-browser.gpg] https://repo.vivaldi.com/archive/deb stable main" | \
sudo tee /etc/apt/sources.list.d/vivaldi.list
sudo apt update
sudo apt install vivaldi-stable -y
Bruk RDP. Fungerer fint. Ikke vær innlogget via consol her i Proxmox. Kmmandoer fra ren installasjon:
sudo apt update sudo apt install -y xrdp sudo adduser xrdp ssl-cert echo xfce4-session > ~/.xsession sudo bash -c 'echo xfce4-session > /etc/skel/.xsession' sudo systemctl restart xrdp sudo systemctl restart xrdp-sesman sudo ufw allow 3389/tcp
Logg inn fra Windows RDP
Velg:
Session: Xorg
Bruker: vanlig Debian-user (IKKE root)
Desktop: Xfce starter automatisk
--
sudo apt-get update
sudo apt-get install -y git gcc g++ make cmake libasound2-dev libudev-dev libavahi-client-dev alsa-utils
cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf
mkdir build && cd build
cmake ..
make -j4
sudo make install
make install-conf
Finn audio device:
arecord -l (Eks ADEVICE plughw:1,0 )
Rediger config:
nano ~/direwolf.conf
Start Direwolf:
direwolf -c ~/direwolf.conf
Use alsamixer to fine-tune audio levels for optimal performance:
alsamixer
Automatic Startup:
sudo nano /etc/systemd/system/direwolf.service
Legg inn(Replace yourusername with your actual username. ):
[Unit]
Description=Dire Wolf APRS Software TNC
After=sound.target network.target
[Service]
ExecStart=/usr/local/bin/direwolf -c /home/hes/direwolf.conf
WorkingDirectory=/home/hes
User=hes
Restart=on-failure
[Install]
WantedBy=multi-user.target
Kjør så:
sudo systemctl enable direwolf
sudo systemctl start direwolf
sudo systemctl daemon-reload
sudo systemctl start direwolf
systemctl status direwolf
For å monitorere:
sudo journalctl -u direwolf -f
Config for iGate:
ADEVICE - plughw:1,0
ACHANNELS 1
CHANNEL 0
MYCALL LA8DKA-3
MODEM 1200
AGWPORT 8000
KISSPORT 8001
IGSERVER euro.aprs2.net
IGLOGIN LA8DKA-3 19622
IGTXVIA 0 WIDE1-1
IGTXLIMIT 6 10
PERSIST 63
SLOTTIME 12
RETRY 5
FRACK 5
MAXFRAME 4
PACLEN 128
DWAIT 0
TXDELAY 50
TXTAIL 40
apt update
apt install -y ca-certificates apt-transport-https gnupg wget lsb-release sudo
usermod -aG sudo hes
ℹ️ sudo blir tilgjengelig for hes etter neste login – ikke relevant nå.
apt install -y unattended-upgrades needrestart logrotate cron vim htop tmux smartmontools rsyslog
dpkg-reconfigure -f noninteractive unattended-upgrades
systemctl enable unattended-upgrades
systemctl start unattended-upgrades
apt install -y systemd-timesyncd
timedatectl set-ntp true
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 10000/tcp
ufw --force enable
wget -q https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh -O /tmp/webmin-setup-repo.sh
sh /tmp/webmin-setup-repo.sh
apt update
apt install -y webmin --install-recommends
sed -i 's/main non-free-firmware/main contrib non-free-firmware/' /etc/apt/sources.list
apt update
apt install -y fastfetch
grep -q fastfetch /etc/bash.bashrc || echo '
# fastfetch on interactive shells
if [[ $- == *i* ]] && [[ -t 1 ]] && command -v fastfetch >/dev/null; then
fastfetch
fi
' >> /etc/bash.bashrc
apt autoremove --purge -y
apt clean
systemctl --failed
Linux Mint 22.3 XFCE – Chrome Remote Desktop (same session patch)
VM-oppsett:
Linux Mint 22.3 XFCE Edition
Autologin aktivert under installasjon
QEMU Guest Agent aktivert i Proxmox Options + cold start
Display: VirtIO-GPU
Installert:
sudo apt install qemu-guest-agent
Google Chrome: google-chrome-stable_current_amd64.deb
Chrome Remote Desktop: chrome-remote-desktop_current_amd64.deb + sudo apt -f install -y
Bruker lagt i gruppe: sudo usermod -aG chrome-remote-desktop $USER
Portfolio Performance: flatpak install flathub info.portfolio_performance.PortfolioPerformance -y
Fjernet light-locker (forhindrer svart skjerm via CRD):
sudo apt remove light-locker light-locker-settings -y
Keyring-fix (tomt passord, unngår keyring-prompt):
mkdir -p ~/.local/share/keyrings
cat > ~/.local/share/keyrings/login.keyring << 'EOF'
[keyring]
display-name=login
ctime=0
mtime=0
lock-on-idle=false
lock-after=false
EOF
chmod 600 ~/.local/share/keyrings/login.keyring
CRD autorisering:
Via https://remotedesktop.google.com/headless → Set up via SSH
Debian Linux-kommando kjørt i terminal på VM-en
Velg 6-sifret PIN
Same-session patch (nightuser):
echo "0" > ~/.config/chrome-remote-desktop/Xsession
cd /opt/google/chrome-remote-desktop
sudo cp chrome-remote-desktop chrome-remote-desktop.bak
sudo wget -qO- "https://gist.githubusercontent.com/nightuser/2ec1b91a66ec33ef0a0a67b6c570eb40/raw/b09250dcc9a28f09de93192a948dffb4963c2aca/use_existing_session.patch" | tail -n +5 > /tmp/use_existing_session.patch
sudo patch -Np1 -i /tmp/use_existing_session.patch
sudo systemctl restart chrome-remote-desktop@$USER.service
Etter CRD-oppdateringer (re-patch):
cd /opt/google/chrome-remote-desktop
sudo cp chrome-remote-desktop.bak chrome-remote-desktop
sudo patch -Np1 -i /tmp/use_existing_session.patch
sudo systemctl restart chrome-remote-desktop@$USER.service
Hvis /tmp/use_existing_session.patch er borte, last ned på nytt med wget-kommandoen over.
Viktig:
Ikke logg ut – bare lukk CRD-vinduet
Kilde: https://gist.github.com/nightuser/2ec1b91a66ec33ef0a0a67b6c570eb40
Nordnet CSV-import i Portfolio Performance:
Encoding: UTF-16, Delimiter: Tab
Type of data: Portfolio Transactions
Mapping: Handelsdag→Date, Transaksjonstype→Type, Verdipapir→Security Name, ISIN→ISIN, Antall→Shares, Totale Avgifter→Fees, Beløp→Value
Her er Remote desktop for Lubuntu!
CHROME REMOTE DESKTOP – LUBUNTU 25.10 (LXQt / X11)
OS: Lubuntu 25.10 Desktop
Display: X11 (ikke Wayland)
Autologin: Aktivert i SDDM
Bruker: vanlig bruker (ikke root)
VM anbefalt:
VirtIO-GPU
QEMU Guest Agent
VERIFISER AT SYSTEMET KJØRER X11
Kjør:
loginctl show-session 1 -p Type -p Display
Forventet:
Type=x11
Display=:0
Hvis ikke X11 → stopp. CRD fungerer ikke med Wayland.
INSTALLER CHROME REMOTE DESKTOP
Last ned og installer:
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
sudo apt install ./chrome-remote-desktop_current_amd64.deb -y
Verifiser:
systemctl status chrome-remote-desktop@$USER
Skal vise:
inactive (dead)
Dette er riktig før autorisering.
AUTORISER MASKINEN
Gå til:
https://remotedesktop.google.com/headless
Velg:
Set up via SSH → Debian Linux
Kjør kommandoen Google gir deg (én gang).
Etterpå verifiser:
systemctl status chrome-remote-desktop@$USER
Skal vise:
active (running)
På dette tidspunktet vil CRD lage egen session (:20).
Det er normalt før patch.
BACKUP AV CRD-FIL
sudo cp /opt/google/chrome-remote-desktop/chrome-remote-desktop \
/opt/google/chrome-remote-desktop/chrome-remote-desktop.bak
LAST NED SAME-SESSION PATCH
sudo wget -qO- \
"https://gist.githubusercontent.com/nightuser/2ec1b91a66ec33ef0a0a67b6c570eb40/raw/b09250dcc9a28f09de93192a948dffb4963c2aca/use_existing_session.patch" \
| tail -n +5 > /tmp/use_existing_session.patch
ANVEND PATCH
cd /opt/google/chrome-remote-desktop
sudo patch -Np1 -i /tmp/use_existing_session.patch
Viktig:
Ingen “Hunk FAILED” skal vises.
“offset” og “fuzz” er normalt.
SETT KORREKT DISPLAY (KRITISK)
Finn aktiv display:
loginctl show-session 1 -p Display
Hvis resultat er:
Display=:0
Lag konfigurasjonsfil:
mkdir -p ~/.config/chrome-remote-desktop
echo 0 > ~/.config/chrome-remote-desktop/Xsession
VIKTIG:
Filen skal inneholde KUN tallet.
0
Ikke:
exec startlxqt
Ikke:
kommandoer
Kun display-nummer.
RESTART TJENESTEN
sudo systemctl restart chrome-remote-desktop@$USER
Verifiser:
systemctl status chrome-remote-desktop@$USER
Skal vise:
active (running)
Ingen feil om :20
Ingen exit-code
TEST
Gå til:
https://remotedesktop.google.com/access
Koble til maskinen.
Du skal nå se:
Samme LXQt-session
Samme åpne programmer
Ingen ny tom desktop
SPERR OPPDATERING (ANBEFALT)
For å unngå at patch overskrives:
sudo apt-mark hold chrome-remote-desktop
Verifiser:
apt-mark showhold
Skal vise:
chrome-remote-desktop
1. Sørg for at curl er installert FØRST
bash
which curl
# Hvis tom:
sudo apt-get install -y curl gnupg ca-certificates
Manglende curl gir en stille feil: curl | gpg --dearmor lager en 0-byte GPG-nøkkelfil uten synlig feilmelding, og alt senere feiler med kryptisk "not signed"-feil. Sjekk alltid filstørrelsen med ls -la etter dearmor.
2. Legg til CRD-repo og installer
bash
curl https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/chrome-remote-desktop.gpg
echo "deb [arch=amd64] https://dl.google.com/linux/chrome-remote-desktop/deb stable main" | sudo tee /etc/apt/sources.list.d/chrome-remote-desktop.list
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes chrome-remote-desktop
3. Sjekk chrome-remote-desktop-gruppen
bash
getent group chrome-remote-desktop
Opprettes ikke alltid automatisk. Hvis tom:
bash
sudo groupadd chrome-remote-desktop
sudo usermod -a -G chrome-remote-desktop $USER
newgrp chrome-remote-desktop
4. Installer Xfce + xscreensaver
bash
sudo DEBIAN_FRONTEND=noninteractive apt install --assume-yes xfce4 desktop-base dbus-x11 xscreensaver
xscreensaver er påkrevd — XFCE sin standard skjermlås (Light Locker) er inkompatibel med CRD og gir grå/blank skjerm som ikke kan låses opp.
5. Sett global sesjonskonfigurasjon
bash
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session'
Merk: global fil (/etc/chrome-remote-desktop-session), ikke per-bruker — den brukes først.
6. KRITISK — sjekk at ingen display manager kjører aktivt
bash
systemctl status lightdm.service
ps aux | grep -i xorg
disabled i systemd betyr ikke nødvendigvis at den faktisk ikke kjører — xfce4-pakken kan ha startet lightdm som avhengighet. Hvis lightdm sin Xorg kjører på :0/:1, er dette roten til krasj-loop ("Session process terminated", gjentatte "unable to open display"), ikke noe displaynummer-problem. Fiks:
bash
sudo systemctl stop lightdm.service
sudo systemctl disable lightdm.service
sudo reboot
7. Autoriser
Gå til https://remotedesktop.google.com/headless, kjør den genererte kommandoen:
bash
DISPLAY= /opt/google/chrome-remote-desktop/start-host \
--code="..." \
--redirect-url="https://remotedesktop.google.com/_/oauthredirect" \
--name=$(hostname)
Sett 6-sifret PIN når du blir bedt om det.
8. Verifiser
bash
sudo systemctl status chrome-remote-desktop@$USER
journalctl SYSLOG_IDENTIFIER=chrome-remote-desktop -b | tail -20
Se etter stabil "active" (ikke restart-loop) og linjen "Host ready to receive connections." i loggen. xdpyinfo: unable to open display ":20" kan fortsatt dukke opp som harmløs støy før denne linjen.
FIRST_X_DISPLAY_NUMBER-patching av chrome-remote-desktop-scriptet for å tvinge fast displaynummer — ingen offisiell støtte, løste ikke grå skjerm, reversert fullstendig.
Sameksistens med VNC på samme maskin (annen maskin "lt", automatisk innlogging + x11vnc på :0) — CRD klarte aldri å starte stabilt parallelt med en allerede aktiv sesjon, uansett displaynummer-forsøk. Konklusjon: CRD på Linux desktop må eie hele X-oppstarten selv, headless, fra bunnen — ikke dele en eksisterende sesjon.
Ubuntu 26.04 (GNOME 50 / ren Wayland) er uegnet siden CRD krever X11.
Norsk tastatur — setxkbmap må kjøres inne i selve CRD-sesjonen (egen terminal via fjernskrivebordet), ikke via SSH. Permanent:
bash
sudo dpkg-reconfigure keyboard-configuration # velg Norwegian
SMB/NAS med varig lagret passord i Thunar:
bash
sudo apt install -y gnome-keyring seahorse libpam-gnome-keyring
sudo sed -i '/@include common-session/a session optional pam_gnome_keyring.so auto_start' /etc/pam.d/chrome-remote-desktop
sudo systemctl restart chrome-remote-desktop@$USER
Hvis gammel/korrupt keyring finnes fra før: rm ~/.local/share/keyrings/login.keyring ~/.local/share/keyrings/user.keystore før PAM-modulen kan opprette en ny.
OnlyOffice i stedet for LibreOffice:
bash
sudo apt purge -y libreoffice* mythes-en-us
sudo apt autoremove -y
Offisiell GPG-URL ga 404/0-byte fil. Løsning — hent via keyserver:
bash
gpg --no-default-keyring --keyring gnupg-ring:/tmp/onlyoffice.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5
sudo chmod 644 /tmp/onlyoffice.gpg && sudo chown root:root /tmp/onlyoffice.gpg
sudo mv /tmp/onlyoffice.gpg /usr/share/keyrings/onlyoffice.gpg
Vivaldi browser (fungerte uten kjente fallgruver):
bash
curl -fsSL https://repo.vivaldi.com/archive/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/vivaldi-browser.gpg
echo "deb [signed-by=/usr/share/keyrings/vivaldi-browser.gpg arch=$(dpkg --print-architecture)] https://repo.vivaldi.com/archive/deb/ stable main" | sudo tee /etc/apt/sources.list.d/vivaldi-archive.list
sudo apt update && sudo apt install -y vivaldi-stable
Panel/tema: Fjern "Lock panel" i Panel Preferences → Display, dra hele panelet (ikke enkeltikoner) til bunn i én bevegelse — dra av enkeltelementer kan utilsiktet opprette et nytt panel. Moderne tema:
bash
sudo apt install -y arc-theme papirus-icon-theme xfce4-whiskermenu-plugin
Write a message…
#
# setup-crd-etterarbeid.sh
# Fase 2: etterarbeid på ferdig CRD-arbeidsstasjon (ren Debian 13 + XFCE + SSH).
#
# VIKTIG: Skrivebord-delen (tema/bakgrunn/panel) krever en AKTIV X-sesjon.
# Kjør HELE dette scriptet inne i en terminal ÅPNET INNE I selve
# CRD-skrivebordet, ikke via SSH - SSH har ikke tilgang til DISPLAY.
#
# Idempotent - kan kjøres flere ganger uten å ødelegge noe.
# Ingen parametere - kjører alt i fast rekkefølge.
#
# Bruk: ./setup-crd-etterarbeid.sh
#
set -uo pipefail
SCRIPT_USER="$(whoami)"
LOGFILE="/tmp/setup-etterarbeid-$(date +%Y%m%d-%H%M%S).log"
log() { echo "$@" | tee -a "$LOGFILE"; }
step() { log ""; log "=== $1 ==="; }
fail() { log "FEIL: $1"; log "Se $LOGFILE for detaljer."; exit 1; }
ok() { log "OK: $1"; }
skip() { log "HOPPER OVER (allerede gjort): $1"; }
pkg_installed() { dpkg -l "$1" 2>/dev/null | grep -q "^ii"; }
require_sudo() {
if ! sudo -n true 2>/dev/null; then
log "Trenger sudo-passord:"
sudo -v || fail "Fikk ikke sudo-tilgang."
fi
}
require_display() {
if [ -z "${DISPLAY:-}" ]; then
fail "DISPLAY er ikke satt. Dette scriptet må kjøres i en terminal ÅPNET INNE I CRD-skrivebordet, ikke via SSH."
fi
if ! xset q > /dev/null 2>&1; then
fail "DISPLAY er satt til '$DISPLAY' men kan ikke nås. Kjør dette inne i selve CRD-sesjonen."
fi
}
require_sudo
require_display
# ---------------------------------------------------------------------------
step "SMB/NAS - varig lagret passord via gnome-keyring"
PKGS="gnome-keyring seahorse libpam-gnome-keyring cifs-utils gvfs gvfs-backends gvfs-fuse"
MISSING=""
for p in $PKGS; do
pkg_installed "$p" || MISSING="$MISSING $p"
done
if [ -n "$MISSING" ]; then
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes $MISSING \
|| fail "Installasjon feilet:$MISSING"
ok "Installerte:$MISSING"
else
skip "Alle SMB/keyring-pakker er installert"
fi
PAM_FILE="/etc/pam.d/chrome-remote-desktop"
if [ ! -f "$PAM_FILE" ]; then
fail "$PAM_FILE finnes ikke - er chrome-remote-desktop installert?"
fi
if grep -q "pam_gnome_keyring.so auto_start" "$PAM_FILE"; then
skip "PAM-keyring-linje finnes allerede i $PAM_FILE"
else
sudo sed -i '/@include common-session/a session optional pam_gnome_keyring.so auto_start' "$PAM_FILE" \
|| fail "Klarte ikke redigere $PAM_FILE"
ok "La til pam_gnome_keyring i $PAM_FILE"
NEEDS_CRD_RESTART=1
fi
KEYRING_DIR="$HOME/.local/share/keyrings"
if [ -f "$KEYRING_DIR/login.keyring" ]; then
log "Fant eksisterende login.keyring - kan være en gammel/ulåsbar keyring fra tidligere testing."
read -r -p "Slette og la den opprettes på nytt automatisk? (ja/nei): " ANSWER
if [ "$ANSWER" = "ja" ]; then
rm -f "$KEYRING_DIR/login.keyring" "$KEYRING_DIR/user.keystore"
ok "Gammel keyring slettet - ny opprettes ved neste innlogging"
else
log "Beholder eksisterende keyring."
fi
else
skip "Ingen eksisterende login.keyring funnet - ren tilstand"
fi
if [ "${NEEDS_CRD_RESTART:-0}" = "1" ]; then
sudo systemctl restart "chrome-remote-desktop@$SCRIPT_USER"
log "CRD-tjenesten restartet for at PAM-endringen skal tre i kraft. Koble til på nytt."
fi
# ---------------------------------------------------------------------------
step "Fjern LibreOffice, installer OnlyOffice"
if dpkg -l | grep -q "^ii.*libreoffice"; then
sudo apt-get purge -y 'libreoffice*' 2>/dev/null
sudo apt-get autoremove -y
ok "LibreOffice fjernet"
else
skip "LibreOffice er allerede fjernet"
fi
if pkg_installed mythes-en-us; then
sudo apt-get purge -y mythes-en-us
sudo apt-get autoremove -y
ok "mythes-en-us fjernet"
fi
if pkg_installed onlyoffice-desktopeditors; then
skip "OnlyOffice er allerede installert"
else
KEYRING="/usr/share/keyrings/onlyoffice.gpg"
if [ ! -s "$KEYRING" ]; then
log "Henter OnlyOffice GPG-nøkkel via keyserver (offisiell nedlastings-URL har vist seg å gi 404)..."
gpg --no-default-keyring --keyring gnupg-ring:/tmp/onlyoffice.gpg \
--keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5 \
|| fail "Klarte ikke hente OnlyOffice GPG-nøkkel fra keyserver."
if [ ! -s /tmp/onlyoffice.gpg ]; then
fail "OnlyOffice-nøkkelfil er tom etter henting fra keyserver."
fi
sudo mkdir -p /usr/share/keyrings
sudo chmod 644 /tmp/onlyoffice.gpg
sudo chown root:root /tmp/onlyoffice.gpg
sudo mv /tmp/onlyoffice.gpg "$KEYRING"
ok "OnlyOffice GPG-nøkkel på plass"
fi
echo "deb [signed-by=$KEYRING] https://download.onlyoffice.com/repo/debian squeeze main" \
| sudo tee /etc/apt/sources.list.d/onlyoffice.list > /dev/null
sudo apt-get update || fail "apt-get update feilet for OnlyOffice-repo."
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes onlyoffice-desktopeditors \
|| fail "Installasjon av OnlyOffice feilet."
ok "OnlyOffice installert"
fi
# ---------------------------------------------------------------------------
step "Vivaldi browser"
if pkg_installed vivaldi-stable; then
skip "Vivaldi er allerede installert"
else
KEYRING="/usr/share/keyrings/vivaldi-browser.gpg"
if [ ! -s "$KEYRING" ]; then
curl -fsSL https://repo.vivaldi.com/archive/linux_signing_key.pub \
| sudo gpg --dearmor -o "$KEYRING"
if [ ! -s "$KEYRING" ]; then
fail "Vivaldi GPG-nøkkelfil er tom etter nedlasting."
fi
fi
ARCH="$(dpkg --print-architecture)"
echo "deb [signed-by=$KEYRING arch=$ARCH] https://repo.vivaldi.com/archive/deb/ stable main" \
| sudo tee /etc/apt/sources.list.d/vivaldi-archive.list > /dev/null
sudo apt-get update || fail "apt-get update feilet for Vivaldi-repo."
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes vivaldi-stable \
|| fail "Installasjon av Vivaldi feilet."
ok "Vivaldi installert"
fi
# ---------------------------------------------------------------------------
step "Skrivebord: mørk grå bakgrunn, panel nederst venstre, moderne tema"
PKGS="arc-theme papirus-icon-theme xfce4-whiskermenu-plugin"
MISSING=""
for p in $PKGS; do
pkg_installed "$p" || MISSING="$MISSING $p"
done
if [ -n "$MISSING" ]; then
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes $MISSING \
|| fail "Installasjon av tema-pakker feilet:$MISSING"
ok "Installerte:$MISSING"
else
skip "Arc-tema, Papirus-ikoner, Whisker Menu er installert"
fi
xfconf-query -c xsettings -p /Net/ThemeName -n -t string -s "Arc-Dark" 2>/dev/null \
|| xfconf-query -c xsettings -p /Net/ThemeName -s "Arc-Dark"
xfconf-query -c xfwm4 -p /general/theme -n -t string -s "Arc-Dark" 2>/dev/null \
|| xfconf-query -c xfwm4 -p /general/theme -s "Arc-Dark"
xfconf-query -c xsettings -p /Net/IconThemeName -n -t string -s "Papirus-Dark" 2>/dev/null \
|| xfconf-query -c xsettings -p /Net/IconThemeName -s "Papirus-Dark"
ok "Arc-Dark tema + Papirus-Dark ikoner satt"
BG_PROPS="$(xfconf-query -c xfce4-desktop -l 2>/dev/null | grep -E 'color-style$|rgba1$')"
if [ -z "$BG_PROPS" ]; then
log "ADVARSEL: fant ingen xfce4-desktop color/rgba-properties. Prøver standardsti likevel."
BG_PROPS="/backdrop/screen0/monitor0/workspace0/color-style
/backdrop/screen0/monitor0/workspace0/rgba1"
fi
echo "$BG_PROPS" | while read -r prop; do
case "$prop" in
*color-style)
xfconf-query -c xfce4-desktop -p "$prop" -n -t int -s 0 2>/dev/null \
|| xfconf-query -c xfce4-desktop -p "$prop" -s 0
;;
*rgba1)
xfconf-query -c xfce4-desktop -p "$prop" -n -t double -t double -t double -t double \
-s 0.18 -s 0.18 -s 0.18 -s 1.0 2>/dev/null \
|| xfconf-query -c xfce4-desktop -p "$prop" -s 0.18 -s 0.18 -s 0.18 -s 1.0
;;
esac
done
ok "Bakgrunn satt til mørk grå, ingen bilde"
# p=8 er bekreftet "bottom left corner" i XFCE sitt gravity-system.
# (p=2/4/6/8 er hjørner - x/y ignoreres da og trengs ikke settes presist)
PANEL_IDS="$(xfconf-query -c xfce4-panel -p /panels -v 2>/dev/null | grep -oE '^[0-9]+' || echo "1")"
for pid in $PANEL_IDS; do
xfconf-query -c xfce4-panel -p "/panels/panel-$pid/position" -n -t string -s "p=8;x=0;y=0" 2>/dev/null \
|| xfconf-query -c xfce4-panel -p "/panels/panel-$pid/position" -s "p=8;x=0;y=0"
xfconf-query -c xfce4-panel -p "/panels/panel-$pid/position-locked" -n -t bool -s true 2>/dev/null \
|| xfconf-query -c xfce4-panel -p "/panels/panel-$pid/position-locked" -s true
done
xfce4-panel --restart 2>/dev/null || true
ok "Panel satt til bunn-venstre (p=8) og låst, restartet"
# ---------------------------------------------------------------------------
step "Utviklerverktøy og OT/nettverk-verktøy"
PKGS="git build-essential python3-pip python3-venv python3-full \
wireshark mosquitto-clients minicom screen tmux rsync"
MISSING=""
for p in $PKGS; do
pkg_installed "$p" || MISSING="$MISSING $p"
done
if [ -n "$MISSING" ]; then
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes $MISSING \
|| fail "Installasjon feilet:$MISSING"
ok "Installerte:$MISSING"
else
skip "Alle dev/OT-verktøy er installert"
fi
if getent group wireshark > /dev/null; then
if groups "$SCRIPT_USER" | grep -qw wireshark; then
skip "$SCRIPT_USER er allerede i wireshark-gruppen"
else
sudo usermod -a -G wireshark "$SCRIPT_USER" \
|| fail "Klarte ikke legge $SCRIPT_USER til i wireshark-gruppen."
ok "$SCRIPT_USER lagt til i wireshark-gruppen (krever ny innlogging)"
fi
fi
log ""
log "Merk: pip3 er 'externally managed' på Debian 13 (PEP 668) - riktig oppførsel."
log "Bruk 'python3 -m venv <navn>' per prosjekt i stedet for direkte pip3 install."
if pkg_installed code; then
skip "VS Code er allerede installert"
else
KEYRING="/usr/share/keyrings/vscode.gpg"
if [ ! -s "$KEYRING" ]; then
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \
| sudo gpg --dearmor -o "$KEYRING"
if [ ! -s "$KEYRING" ]; then
fail "VS Code GPG-nøkkelfil er tom etter nedlasting."
fi
fi
echo "deb [arch=amd64,arm64,armhf signed-by=$KEYRING] https://packages.microsoft.com/repos/code stable main" \
| sudo tee /etc/apt/sources.list.d/vscode.list > /dev/null
sudo apt-get update || fail "apt-get update feilet for VS Code-repo."
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes code \
|| fail "Installasjon av VS Code feilet."
ok "VS Code installert"
fi
if pkg_installed docker-ce; then
skip "Docker er allerede installert"
else
KEYRING="/etc/apt/keyrings/docker.gpg"
sudo mkdir -p /etc/apt/keyrings
if [ ! -s "$KEYRING" ]; then
curl -fsSL https://download.docker.com/linux/debian/gpg \
| sudo gpg --dearmor -o "$KEYRING"
if [ ! -s "$KEYRING" ]; then
fail "Docker GPG-nøkkelfil er tom etter nedlasting."
fi
fi
ARCH="$(dpkg --print-architecture)"
CODENAME="$(. /etc/os-release && echo "$VERSION_CODENAME")"
echo "deb [arch=$ARCH signed-by=$KEYRING] https://download.docker.com/linux/debian $CODENAME stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update || fail "apt-get update feilet for Docker-repo."
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes \
docker-ce docker-ce-cli containerd.io docker-compose-plugin \
|| fail "Installasjon av Docker feilet."
if ! getent group docker | grep -qw "$SCRIPT_USER"; then
sudo usermod -a -G docker "$SCRIPT_USER"
log "$SCRIPT_USER lagt til i docker-gruppen (krever ny innlogging)."
fi
ok "Docker installert"
fi
# ---------------------------------------------------------------------------
step "NetBird VPN-klient"
if pkg_installed netbird; then
skip "NetBird er allerede installert"
else
KEYRING="/usr/share/keyrings/netbird-archive-keyring.gpg"
if [ ! -s "$KEYRING" ]; then
curl -fsSL https://pkgs.netbird.io/debian/public.key \
| sudo gpg --dearmor -o "$KEYRING"
if [ ! -s "$KEYRING" ]; then
fail "NetBird GPG-nøkkelfil er tom etter nedlasting."
fi
sudo chmod 0644 "$KEYRING"
fi
echo "deb [signed-by=$KEYRING] https://pkgs.netbird.io/debian stable main" \
| sudo tee /etc/apt/sources.list.d/netbird.list > /dev/null
sudo apt-get update || fail "apt-get update feilet for NetBird-repo."
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes netbird \
|| fail "Installasjon av NetBird feilet."
ok "NetBird-klient installert"
fi
if systemctl is-active --quiet netbird; then
skip "NetBird-tjenesten kjører allerede"
else
sudo systemctl enable --now netbird 2>/dev/null
ok "NetBird-tjenesten startet"
fi
log ""
log "Merk: klienten er installert men IKKE koblet til noe nettverk ennå."
log "Kjør manuelt med din setup-key og management-URL, f.eks.:"
log " sudo netbird up --management-url https://netbird.steinsland.net:8443 --setup-key <NØKKEL>"
# ---------------------------------------------------------------------------
step "Webmin (åpen tilgang, port 10000, ingen binding)"
if pkg_installed webmin; then
skip "Webmin er allerede installert"
else
TMP_SCRIPT="/tmp/webmin-setup-repo.sh"
curl -fsSL -o "$TMP_SCRIPT" \
https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh \
|| fail "Klarte ikke laste ned webmin-setup-repo.sh."
sudo sh "$TMP_SCRIPT" \
|| fail "webmin-setup-repo.sh feilet. Kjent mulig årsak på Debian 13: utløpt SSL-sertifikat i scriptets egne curl-kall. Sjekk manuelt: sudo sh $TMP_SCRIPT"
sudo apt-get update || fail "apt-get update feilet etter Webmin-repo-oppsett."
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --assume-yes webmin --install-recommends \
|| fail "Installasjon av Webmin feilet."
ok "Webmin installert"
fi
if systemctl is-active --quiet webmin; then
ok "Webmin-tjenesten kjører (port 10000, åpen tilgang)"
else
fail "Webmin-tjenesten kjører ikke etter installasjon. Sjekk: sudo systemctl status webmin"
fi
log "Tilgjengelig på: https://<denne-maskinens-ip>:10000 (selvsignert sertifikat - nettleseren advarer første gang)"
# ---------------------------------------------------------------------------
log ""
log "=== Alt fullført ==="
log "Logg: $LOGFILE"
log ""
log "Gjenstår manuelt:"
log " - NetBird: sudo netbird up --management-url <URL> --setup-key <NØKKEL>"
log " - Webmin: logg inn på https://<ip>:10000 med systembruker/passord"
log " - Test tilkobling fra https://remotedesktop.google.com/access"
log " - setxkbmap no inne i CRD-sesjonen om NO-layout ikke slo gjennom"