Merge pull request #35 from outis1one/claude/add-intercom-ptt-015jdwyCAZbQmbow1Jcbnxc4
Claude/add intercom ptt 015jdwy ca zb qmbow1 jcbnxc4
This commit is contained in:
@@ -0,0 +1,310 @@
|
||||
# UBK Intercom Setup - Mumble/Talkkonnect
|
||||
|
||||
This is a standalone script for setting up push-to-talk (PTT) intercom functionality for the Ubuntu Based Kiosk using Mumble/Talkkonnect.
|
||||
|
||||
## How to Use
|
||||
|
||||
### Option 1: Via Main Install Script (Recommended)
|
||||
If you've cloned or downloaded the UBK repository, the intercom setup is automatically available:
|
||||
|
||||
```bash
|
||||
# Run the main UBK installer
|
||||
./install_kiosk_0.9.6.sh
|
||||
|
||||
# Navigate to: Main Menu → Addons Management (option 2)
|
||||
# Then select: talkkonnect/Murmur Intercom (native audio) (option 4)
|
||||
```
|
||||
|
||||
The main installer will automatically launch `setup_intercom.sh` when you select the intercom option.
|
||||
|
||||
### Option 2: Standalone Usage
|
||||
You can also run the intercom setup script directly:
|
||||
|
||||
```bash
|
||||
# Make sure both scripts are in the same directory
|
||||
cd /path/to/ubk
|
||||
./setup_intercom.sh
|
||||
```
|
||||
|
||||
**Important:** Both `install_kiosk_0.9.6.sh` and `setup_intercom.sh` must be in the same directory for the integration to work.
|
||||
|
||||
## What's Included When You Download the Repository
|
||||
|
||||
When you clone or download the UBK repository, you get:
|
||||
|
||||
```
|
||||
ubk/
|
||||
├── install_kiosk_0.9.6.sh # Main UBK installer (has intercom integration)
|
||||
├── setup_intercom.sh # Standalone intercom setup & management
|
||||
├── INTERCOM_README.md # This file
|
||||
└── integrate_intercom.sh # (Optional) Integration helper/documentation
|
||||
```
|
||||
|
||||
Both scripts work together:
|
||||
- **install_kiosk_0.9.6.sh**: Full UBK installation with integrated intercom support
|
||||
- **setup_intercom.sh**: Dedicated intercom setup with its own menu system
|
||||
|
||||
You don't need to modify anything - just run either script and they'll find each other automatically.
|
||||
|
||||
## Overview
|
||||
|
||||
The intercom system uses:
|
||||
- **Murmur**: The Mumble server software (can run on one kiosk)
|
||||
- **talkkonnect**: A headless Mumble client optimized for push-to-talk
|
||||
|
||||
## Use Cases
|
||||
|
||||
### 1. All-in-One (Server + Client)
|
||||
One kiosk acts as both the server and a client. Other devices can connect to it.
|
||||
|
||||
```bash
|
||||
./setup_intercom.sh
|
||||
# Select option 1: Install All-in-One (Server + Client)
|
||||
```
|
||||
|
||||
### 2. Client Only
|
||||
Connect to an existing Mumble server (could be another kiosk or external server).
|
||||
|
||||
```bash
|
||||
./setup_intercom.sh
|
||||
# Select option 3: Install talkkonnect Client Only
|
||||
# Enter the server IP, port, and credentials
|
||||
```
|
||||
|
||||
### 3. Server Only
|
||||
Turn a kiosk into a dedicated Mumble server.
|
||||
|
||||
```bash
|
||||
./setup_intercom.sh
|
||||
# Select option 2: Install Murmur Server Only
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Single Kiosk Setup (Server + Client)
|
||||
|
||||
```bash
|
||||
cd /path/to/ubk
|
||||
./setup_intercom.sh
|
||||
```
|
||||
|
||||
1. Select **Option 1: Install All-in-One (Server + Client)**
|
||||
2. Set a SuperUser password (for server administration)
|
||||
3. Set a server password (clients need this to connect)
|
||||
4. Set a welcome message
|
||||
5. Set a username for the talkkonnect client
|
||||
6. The client will auto-connect to the local server
|
||||
|
||||
### Multi-Kiosk Setup
|
||||
|
||||
**On the server kiosk:**
|
||||
```bash
|
||||
./setup_intercom.sh
|
||||
# Select option 2: Install Murmur Server Only
|
||||
# Note the server IP address shown after installation
|
||||
```
|
||||
|
||||
**On each client kiosk:**
|
||||
```bash
|
||||
./setup_intercom.sh
|
||||
# Select option 3: Install talkkonnect Client Only
|
||||
# Enter the server IP from above
|
||||
# Port: 64738 (default)
|
||||
# Enter username and password
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
### Push-to-Talk
|
||||
- Default PTT key: **Spacebar**
|
||||
- Press and hold to transmit audio
|
||||
- Release to stop transmitting
|
||||
|
||||
### Management
|
||||
The script provides a full-featured menu for:
|
||||
- Starting/stopping services
|
||||
- Reconfiguring settings
|
||||
- Viewing logs
|
||||
- Uninstalling components
|
||||
|
||||
### Connecting from Other Devices
|
||||
|
||||
Other devices can connect to your Mumble server using:
|
||||
|
||||
**Desktop (Windows/Mac/Linux):**
|
||||
- Download Mumble client: https://www.mumble.info/downloads/
|
||||
- Connect to: `<kiosk-ip>:64738`
|
||||
|
||||
**Mobile (iOS/Android):**
|
||||
- Install Mumble app from app store
|
||||
- Add server: `<kiosk-ip>:64738`
|
||||
|
||||
## Configuration
|
||||
|
||||
### Server Configuration
|
||||
Location: `/etc/mumble-server.ini`
|
||||
|
||||
Key settings:
|
||||
- Port: 64738 (default)
|
||||
- Max users: 10
|
||||
- Bandwidth: 72000
|
||||
|
||||
### Client Configuration
|
||||
Location: `/home/kiosk/talkkonnect.xml`
|
||||
|
||||
Key settings:
|
||||
- Server address and port
|
||||
- Username and password
|
||||
- PTT button (default: spacebar)
|
||||
- Audio settings
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Check Service Status
|
||||
|
||||
```bash
|
||||
# Check Murmur server
|
||||
sudo systemctl status mumble-server
|
||||
|
||||
# Check talkkonnect client
|
||||
sudo systemctl status talkkonnect
|
||||
```
|
||||
|
||||
### View Logs
|
||||
|
||||
Use the built-in menu options, or:
|
||||
|
||||
```bash
|
||||
# Murmur logs
|
||||
sudo journalctl -u mumble-server -n 50
|
||||
|
||||
# talkkonnect logs
|
||||
sudo journalctl -u talkkonnect -n 50
|
||||
```
|
||||
|
||||
### Audio Issues
|
||||
|
||||
1. Check audio devices:
|
||||
```bash
|
||||
arecord -l # List recording devices
|
||||
aplay -l # List playback devices
|
||||
```
|
||||
|
||||
2. Test audio:
|
||||
```bash
|
||||
# Test microphone
|
||||
arecord -d 5 test.wav && aplay test.wav
|
||||
```
|
||||
|
||||
3. Edit talkkonnect configuration:
|
||||
```bash
|
||||
nano /home/kiosk/talkkonnect.xml
|
||||
# Adjust <audio> section device names
|
||||
sudo systemctl restart talkkonnect
|
||||
```
|
||||
|
||||
### Firewall
|
||||
|
||||
If clients can't connect, ensure port 64738 is open:
|
||||
|
||||
```bash
|
||||
sudo ufw allow 64738/tcp
|
||||
sudo ufw allow 64738/udp
|
||||
```
|
||||
|
||||
## Integration with Main Install Script
|
||||
|
||||
To integrate this into the main UBK install script:
|
||||
|
||||
### Option 1: Direct Integration
|
||||
|
||||
Add to the addon menu in `install_kiosk_*.sh`:
|
||||
|
||||
```bash
|
||||
# In the addon menu section
|
||||
echo " X. Intercom (Mumble/Talkkonnect)"
|
||||
|
||||
# In the case statement
|
||||
X)
|
||||
# Source and run the intercom script
|
||||
bash setup_intercom.sh
|
||||
;;
|
||||
```
|
||||
|
||||
### Option 2: Call as External Script
|
||||
|
||||
```bash
|
||||
# From anywhere in the install script
|
||||
if [[ -f "$SCRIPT_DIR/setup_intercom.sh" ]]; then
|
||||
bash "$SCRIPT_DIR/setup_intercom.sh"
|
||||
else
|
||||
echo "Intercom setup script not found"
|
||||
fi
|
||||
```
|
||||
|
||||
### Option 3: Function Import
|
||||
|
||||
Source the functions for use in the main script:
|
||||
|
||||
```bash
|
||||
# Source the intercom functions (requires extracting functions to separate file)
|
||||
source "$SCRIPT_DIR/intercom_functions.sh"
|
||||
|
||||
# Then call functions directly
|
||||
install_murmur_and_talkkonnect
|
||||
```
|
||||
|
||||
## Technical Details
|
||||
|
||||
### Murmur Server
|
||||
- Package: `mumble-server`
|
||||
- Service: `mumble-server.service`
|
||||
- Port: 64738 (TCP/UDP)
|
||||
- Config: `/etc/mumble-server.ini`
|
||||
- Database: `/var/lib/mumble-server/mumble-server.sqlite`
|
||||
|
||||
### talkkonnect Client
|
||||
- Written in: Go
|
||||
- Built from: https://github.com/talkkonnect/talkkonnect
|
||||
- Binary: `/home/kiosk/go/bin/talkkonnect`
|
||||
- Service: `talkkonnect.service`
|
||||
- Config: `/home/kiosk/talkkonnect.xml`
|
||||
|
||||
### Dependencies
|
||||
- Go 1.23.4+
|
||||
- libopenal-dev
|
||||
- libopus-dev
|
||||
- alsa-utils
|
||||
- portaudio19-dev
|
||||
- git
|
||||
|
||||
## Network Requirements
|
||||
|
||||
- **Server**: Port 64738 (TCP/UDP) must be accessible
|
||||
- **Clients**: Outbound access to server on port 64738
|
||||
- **Local Network**: For LAN-only intercom, no internet required
|
||||
- **Remote Access**: If connecting over internet, configure port forwarding
|
||||
|
||||
## Security Considerations
|
||||
|
||||
1. **Server Password**: Set a strong server password to prevent unauthorized access
|
||||
2. **SuperUser Password**: Keep this secure - it has admin privileges on the server
|
||||
3. **Network**: Consider using a VPN for remote access instead of exposing port 64738 to the internet
|
||||
4. **Certificates**: For production, consider setting up SSL/TLS certificates (currently using `insecure: true`)
|
||||
|
||||
## Version History
|
||||
|
||||
- **v1.0.0** - Initial standalone release
|
||||
- Full Murmur server installation
|
||||
- talkkonnect client installation
|
||||
- All-in-one option
|
||||
- Service management
|
||||
- Configuration tools
|
||||
|
||||
## Support
|
||||
|
||||
For issues or questions:
|
||||
- Check logs using the built-in menu options
|
||||
- Review the Troubleshooting section
|
||||
- Check talkkonnect documentation: https://github.com/talkkonnect/talkkonnect
|
||||
- Check Mumble documentation: https://wiki.mumble.info/
|
||||
Executable
+10111
File diff suppressed because it is too large
Load Diff
Executable
+99
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
################################################################################
|
||||
### Integration Helper for Intercom Setup
|
||||
################################################################################
|
||||
#
|
||||
# This script shows how to integrate the standalone intercom setup
|
||||
# into the main UBK install script.
|
||||
#
|
||||
# Usage:
|
||||
# 1. Copy this code block into your main install script
|
||||
# 2. Add a menu option to call launch_intercom_setup()
|
||||
# 3. The intercom setup will run as a subshell and return control
|
||||
#
|
||||
################################################################################
|
||||
|
||||
# Get the directory where scripts are located
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
launch_intercom_setup() {
|
||||
local intercom_script="$SCRIPT_DIR/setup_intercom.sh"
|
||||
|
||||
if [[ ! -f "$intercom_script" ]]; then
|
||||
echo "[ERROR] Intercom setup script not found at: $intercom_script"
|
||||
echo "Please ensure setup_intercom.sh is in the same directory as this script"
|
||||
read -r -p "Press Enter to continue..."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Make sure it's executable
|
||||
chmod +x "$intercom_script"
|
||||
|
||||
# Launch the intercom setup
|
||||
bash "$intercom_script"
|
||||
|
||||
# Return code will be passed through
|
||||
return $?
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### Example Integration into Main Install Script
|
||||
################################################################################
|
||||
|
||||
# Add this to your addon menu section:
|
||||
#
|
||||
# addon_menu() {
|
||||
# while true; do
|
||||
# clear
|
||||
# echo "════════════════════════════════════════════════════════════"
|
||||
# echo " ADDONS MENU"
|
||||
# echo "════════════════════════════════════════════════════════════"
|
||||
# echo
|
||||
# echo " 1. VNC Remote Desktop"
|
||||
# echo " 2. WireGuard VPN"
|
||||
# echo " 3. Tailscale"
|
||||
# echo " 4. Netbird"
|
||||
# echo " 5. Jitsi Intercom"
|
||||
# echo " 6. Mumble/Talkkonnect Intercom" # <-- Add this line
|
||||
# echo " 0. Return to main menu"
|
||||
# echo
|
||||
# read -r -p "Choose: " addon_choice
|
||||
#
|
||||
# case "$addon_choice" in
|
||||
# 1) addon_vnc ;;
|
||||
# 2) addon_wireguard ;;
|
||||
# 3) addon_tailscale ;;
|
||||
# 4) addon_netbird ;;
|
||||
# 5) addon_jitsi_intercom ;;
|
||||
# 6) launch_intercom_setup ;; # <-- Add this line
|
||||
# 0) return ;;
|
||||
# esac
|
||||
# done
|
||||
# }
|
||||
|
||||
################################################################################
|
||||
### Alternative: Direct Function Call
|
||||
################################################################################
|
||||
|
||||
# If you want even tighter integration, you can source the intercom script
|
||||
# and call its functions directly. This requires modifying setup_intercom.sh
|
||||
# to check if it's being sourced or run directly:
|
||||
#
|
||||
# In setup_intercom.sh, replace the main entry point section with:
|
||||
#
|
||||
# if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
# # Script is being run directly
|
||||
# main_menu
|
||||
# fi
|
||||
#
|
||||
# Then you can source it:
|
||||
#
|
||||
# source "$SCRIPT_DIR/setup_intercom.sh"
|
||||
# install_murmur_and_talkkonnect # Call functions directly
|
||||
|
||||
################################################################################
|
||||
### Quick Test
|
||||
################################################################################
|
||||
|
||||
# Uncomment to test this integration helper:
|
||||
# launch_intercom_setup
|
||||
Executable
+857
@@ -0,0 +1,857 @@
|
||||
#!/bin/bash
|
||||
################################################################################
|
||||
### UBK Mumble/Talkkonnect Intercom Setup ###
|
||||
### Standalone Installation and Management Script ###
|
||||
################################################################################
|
||||
#
|
||||
# This script provides a complete push-to-talk (PTT) intercom solution using:
|
||||
# - Murmur: The Mumble server (can run on one kiosk)
|
||||
# - talkkonnect: A headless Mumble client for push-to-talk communication
|
||||
#
|
||||
# Use Cases:
|
||||
# 1. Server + Client (All-in-one): One kiosk acts as both server and client
|
||||
# 2. Client Only: Connect to an existing Mumble server
|
||||
# 3. Server Only: Set up a kiosk as the intercom server
|
||||
#
|
||||
# Other kiosks or devices can connect using:
|
||||
# - talkkonnect (Linux)
|
||||
# - Mumble desktop client (Windows/Mac/Linux)
|
||||
# - Mumble mobile app (iOS/Android)
|
||||
#
|
||||
################################################################################
|
||||
|
||||
VERSION="1.0.0"
|
||||
KIOSK_USER="${KIOSK_USER:-kiosk}"
|
||||
|
||||
################################################################################
|
||||
### HELPER FUNCTIONS
|
||||
################################################################################
|
||||
|
||||
log_error() {
|
||||
echo "[ERROR] $*" >&2
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo "✓ $*"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo "⚠ $*"
|
||||
}
|
||||
|
||||
pause() {
|
||||
read -r -p "Press Enter to continue..."
|
||||
}
|
||||
|
||||
get_ip_address() {
|
||||
hostname -I | awk '{print $1}' || echo "No IP"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### STATUS CHECK FUNCTIONS
|
||||
################################################################################
|
||||
|
||||
check_murmur_status() {
|
||||
local installed=false
|
||||
local running=false
|
||||
|
||||
if systemctl list-unit-files | grep -q "mumble-server.service"; then
|
||||
installed=true
|
||||
if systemctl is-active --quiet mumble-server; then
|
||||
running=true
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$installed:$running"
|
||||
}
|
||||
|
||||
check_talkkonnect_status() {
|
||||
local installed=false
|
||||
local running=false
|
||||
|
||||
if command -v talkkonnect &>/dev/null || [[ -f "$HOME/go/bin/talkkonnect" ]]; then
|
||||
installed=true
|
||||
if systemctl is-active --quiet talkkonnect; then
|
||||
running=true
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$installed:$running"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### MURMUR SERVER INSTALLATION
|
||||
################################################################################
|
||||
|
||||
install_murmur_server() {
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " INSTALLING MURMUR SERVER"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo
|
||||
|
||||
echo "[1/5] Installing mumble-server package..."
|
||||
sudo apt update
|
||||
sudo apt install -y mumble-server
|
||||
|
||||
echo "[2/5] Getting configuration details..."
|
||||
read -r -s -p "SuperUser password: " superuser_pass
|
||||
echo
|
||||
read -r -s -p "Server password (clients need this): " server_pass
|
||||
echo
|
||||
read -r -p "Welcome text [Welcome to Kiosk Intercom]: " welcome_text
|
||||
welcome_text="${welcome_text:-Welcome to Kiosk Intercom}"
|
||||
|
||||
echo "[3/5] Creating configuration..."
|
||||
local config_file="/etc/mumble-server.ini"
|
||||
|
||||
# Create config if it doesn't exist
|
||||
if [[ ! -f "$config_file" ]]; then
|
||||
sudo tee "$config_file" > /dev/null <<'MURMURCONF'
|
||||
# Murmur configuration file
|
||||
|
||||
# Database location
|
||||
database=/var/lib/mumble-server/mumble-server.sqlite
|
||||
|
||||
# Network settings
|
||||
port=64738
|
||||
host=0.0.0.0
|
||||
|
||||
# Logging
|
||||
logfile=/var/log/mumble-server/mumble-server.log
|
||||
|
||||
# Limits
|
||||
users=10
|
||||
bandwidth=72000
|
||||
|
||||
# Welcome message
|
||||
welcometext=Welcome
|
||||
|
||||
# Server password
|
||||
serverpassword=
|
||||
|
||||
# Allow pings
|
||||
allowping=true
|
||||
|
||||
# Enable HTML
|
||||
allowhtml=true
|
||||
MURMURCONF
|
||||
log_success "Config file created"
|
||||
fi
|
||||
|
||||
# Update configuration
|
||||
sudo sed -i "s|^welcometext=.*|welcometext=$welcome_text|" "$config_file"
|
||||
sudo sed -i "s|^port=.*|port=64738|" "$config_file"
|
||||
sudo sed -i "s|^users=.*|users=10|" "$config_file"
|
||||
sudo sed -i "s|^bandwidth=.*|bandwidth=72000|" "$config_file"
|
||||
|
||||
if [[ -n "$server_pass" ]]; then
|
||||
sudo sed -i "s|^serverpassword=.*|serverpassword=$server_pass|" "$config_file"
|
||||
fi
|
||||
|
||||
echo "[4/5] Setting SuperUser password..."
|
||||
# Stop service before setting password
|
||||
sudo systemctl stop mumble-server 2>/dev/null || true
|
||||
sleep 2
|
||||
|
||||
# Set SuperUser password
|
||||
echo "$superuser_pass" | sudo murmurd -ini "$config_file" -supw - 2>/dev/null || {
|
||||
log_warning "Could not set SuperUser password via murmurd command"
|
||||
echo "You can set it later with: sudo murmurd -ini $config_file -supw YOUR_PASSWORD"
|
||||
}
|
||||
|
||||
echo "[5/5] Starting service..."
|
||||
sudo systemctl enable mumble-server
|
||||
sudo systemctl start mumble-server
|
||||
|
||||
# Configure firewall
|
||||
sudo ufw allow 64738/tcp comment 'Mumble/Murmur' 2>/dev/null || true
|
||||
sudo ufw allow 64738/udp comment 'Mumble/Murmur' 2>/dev/null || true
|
||||
|
||||
sleep 3
|
||||
|
||||
local server_ip=$(get_ip_address)
|
||||
log_success "Murmur server installed"
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " Server: $server_ip:64738"
|
||||
echo " SuperUser: SuperUser / $superuser_pass"
|
||||
[[ -n "$server_pass" ]] && echo " Password: $server_pass"
|
||||
echo
|
||||
echo "Connect with Mumble app:"
|
||||
echo " Server: $server_ip"
|
||||
echo " Port: 64738"
|
||||
[[ -n "$server_pass" ]] && echo " Password: $server_pass"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
|
||||
pause
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### TALKKONNECT CLIENT INSTALLATION
|
||||
################################################################################
|
||||
|
||||
install_talkkonnect_with_config() {
|
||||
local server_addr="$1"
|
||||
local server_port="$2"
|
||||
local tk_user="$3"
|
||||
local tk_pass="$4"
|
||||
local tk_channel="$5"
|
||||
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " INSTALLING TALKKONNECT CLIENT"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo
|
||||
|
||||
echo "[1/4] Installing Go..."
|
||||
if ! command -v go &>/dev/null; then
|
||||
wget -q https://golang.org/dl/go1.23.4.linux-amd64.tar.gz
|
||||
sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
|
||||
rm go1.23.4.linux-amd64.tar.gz
|
||||
export PATH=$PATH:/usr/local/go/bin
|
||||
echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/go.sh
|
||||
log_success "Go installed"
|
||||
else
|
||||
log_success "Go already installed"
|
||||
fi
|
||||
|
||||
echo "[2/4] Installing audio dependencies..."
|
||||
sudo apt install -y libopenal-dev libopus-dev alsa-utils portaudio19-dev git
|
||||
|
||||
echo "[3/4] Cloning and building talkkonnect..."
|
||||
local tk_src="/tmp/talkkonnect-src"
|
||||
rm -rf "$tk_src"
|
||||
git clone https://github.com/talkkonnect/talkkonnect.git "$tk_src"
|
||||
|
||||
echo "Building (this takes 5-10 minutes)..."
|
||||
|
||||
# Build as kiosk user with proper environment
|
||||
sudo -u "$KIOSK_USER" bash -c "
|
||||
export PATH=/usr/local/go/bin:\$PATH
|
||||
export HOME=/home/$KIOSK_USER
|
||||
export GOPATH=/home/$KIOSK_USER/go
|
||||
export CGO_ENABLED=1
|
||||
|
||||
mkdir -p /home/$KIOSK_USER/go/bin
|
||||
|
||||
cd '$tk_src' || exit 1
|
||||
|
||||
echo 'Compiling...'
|
||||
go build -v -o /home/$KIOSK_USER/go/bin/talkkonnect . 2>&1 | tail -20
|
||||
|
||||
if [[ -f /home/$KIOSK_USER/go/bin/talkkonnect ]]; then
|
||||
chmod +x /home/$KIOSK_USER/go/bin/talkkonnect
|
||||
echo 'Build successful'
|
||||
exit 0
|
||||
else
|
||||
echo 'Build failed - binary not created'
|
||||
exit 1
|
||||
fi
|
||||
"
|
||||
|
||||
local build_result=$?
|
||||
rm -rf "$tk_src"
|
||||
|
||||
if [[ $build_result -ne 0 ]]; then
|
||||
log_error "Build failed"
|
||||
echo
|
||||
echo "Troubleshooting:"
|
||||
echo " 1. Check Go version: go version"
|
||||
echo " 2. Ensure build tools: sudo apt install build-essential"
|
||||
echo " 3. Check logs above for specific errors"
|
||||
pause
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Verify binary
|
||||
if [[ ! -x "/home/$KIOSK_USER/go/bin/talkkonnect" ]]; then
|
||||
log_error "Binary not executable after build"
|
||||
pause
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "talkkonnect built successfully"
|
||||
|
||||
echo "[4/4] Creating configuration..."
|
||||
|
||||
sudo -u "$KIOSK_USER" tee /home/$KIOSK_USER/talkkonnect.xml > /dev/null <<TKXML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="talkkonnect.org/talkkonnect">
|
||||
<accounts>
|
||||
<account>
|
||||
<default>true</default>
|
||||
<name>Primary</name>
|
||||
<server>$server_addr</server>
|
||||
<username>$tk_user</username>
|
||||
<password>$tk_pass</password>
|
||||
<insecure>true</insecure>
|
||||
<port>$server_port</port>
|
||||
<channel>$tk_channel</channel>
|
||||
</account>
|
||||
</accounts>
|
||||
|
||||
<software>
|
||||
<settings>
|
||||
<outputdevice>default</outputdevice>
|
||||
<loglevel>3</loglevel>
|
||||
<cancellingnoisegate>false</cancellingnoisegate>
|
||||
<simplex>true</simplex>
|
||||
</settings>
|
||||
</software>
|
||||
|
||||
<hardware>
|
||||
<ledstrip><enabled>false</enabled></ledstrip>
|
||||
<targetboard>rpi</targetboard>
|
||||
<buttons>
|
||||
<button>
|
||||
<enabled>true</enabled>
|
||||
<name>Transmit</name>
|
||||
<pin>spacebar</pin>
|
||||
<action>transmit</action>
|
||||
</button>
|
||||
</buttons>
|
||||
</hardware>
|
||||
|
||||
<audio>
|
||||
<input>
|
||||
<enabled>true</enabled>
|
||||
<device>default</device>
|
||||
<samplerate>48000</samplerate>
|
||||
<channels>1</channels>
|
||||
</input>
|
||||
<output>
|
||||
<enabled>true</enabled>
|
||||
<device>default</device>
|
||||
<samplerate>48000</samplerate>
|
||||
<channels>2</channels>
|
||||
<volume>100</volume>
|
||||
</output>
|
||||
</audio>
|
||||
</document>
|
||||
TKXML
|
||||
|
||||
# Create systemd service
|
||||
sudo tee /etc/systemd/system/talkkonnect.service > /dev/null <<EOF
|
||||
[Unit]
|
||||
Description=talkkonnect Mumble Client
|
||||
After=network.target sound.target pipewire.service
|
||||
Wants=pipewire.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$KIOSK_USER
|
||||
Environment="PATH=/usr/local/go/bin:/usr/bin:/bin"
|
||||
Environment="HOME=/home/$KIOSK_USER"
|
||||
Environment="GOPATH=/home/$KIOSK_USER/go"
|
||||
WorkingDirectory=/home/$KIOSK_USER
|
||||
ExecStartPre=/bin/sleep 10
|
||||
ExecStart=/home/$KIOSK_USER/go/bin/talkkonnect -config /home/$KIOSK_USER/talkkonnect.xml
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable talkkonnect
|
||||
sudo systemctl start talkkonnect
|
||||
|
||||
sleep 3
|
||||
|
||||
log_success "talkkonnect installed"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " Server: $server_addr:$server_port"
|
||||
echo " PTT Key: Spacebar"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
|
||||
# Show status
|
||||
echo
|
||||
if systemctl is-active --quiet talkkonnect; then
|
||||
log_success "Service started successfully"
|
||||
else
|
||||
log_warning "Service may have issues - check logs:"
|
||||
echo " sudo journalctl -u talkkonnect -n 50"
|
||||
fi
|
||||
|
||||
pause
|
||||
}
|
||||
|
||||
install_talkkonnect_only() {
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " TALKKONNECT - CONNECT TO EXISTING SERVER"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo
|
||||
|
||||
echo "Enter Murmur/Mumble server details:"
|
||||
read -r -p "Server address (IP or domain): " server_addr
|
||||
read -r -p "Port [64738]: " server_port
|
||||
server_port="${server_port:-64738}"
|
||||
read -r -p "Username: " tk_user
|
||||
read -r -s -p "Password: " tk_pass
|
||||
echo
|
||||
read -r -p "Channel [Root]: " tk_channel
|
||||
tk_channel="${tk_channel:-Root}"
|
||||
|
||||
install_talkkonnect_with_config "$server_addr" "$server_port" "$tk_user" "$tk_pass" "$tk_channel"
|
||||
}
|
||||
|
||||
install_murmur_and_talkkonnect() {
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " ALL-IN-ONE: SERVER + CLIENT"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo
|
||||
|
||||
echo "Installing Murmur server..."
|
||||
install_murmur_server
|
||||
|
||||
echo
|
||||
echo "Now installing talkkonnect client..."
|
||||
echo "Configuring to connect to local server..."
|
||||
|
||||
# Auto-configure for local server
|
||||
AUTO_SERVER="127.0.0.1"
|
||||
AUTO_PORT="64738"
|
||||
read -r -p "Username for talkkonnect [kiosk]: " tk_user
|
||||
tk_user="${tk_user:-kiosk}"
|
||||
read -r -s -p "Server password: " tk_pass
|
||||
echo
|
||||
|
||||
install_talkkonnect_with_config "$AUTO_SERVER" "$AUTO_PORT" "$tk_user" "$tk_pass" "Root"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### SERVICE MANAGEMENT
|
||||
################################################################################
|
||||
|
||||
toggle_murmur_service() {
|
||||
echo
|
||||
if systemctl is-active --quiet mumble-server; then
|
||||
echo "Stopping Murmur server..."
|
||||
sudo systemctl stop mumble-server
|
||||
log_success "Murmur stopped"
|
||||
else
|
||||
echo "Starting Murmur server..."
|
||||
sudo systemctl start mumble-server
|
||||
sleep 2
|
||||
if systemctl is-active --quiet mumble-server; then
|
||||
log_success "Murmur started"
|
||||
else
|
||||
log_error "Failed to start - check logs: sudo journalctl -u mumble-server"
|
||||
fi
|
||||
fi
|
||||
pause
|
||||
}
|
||||
|
||||
toggle_talkkonnect_service() {
|
||||
echo
|
||||
if systemctl is-active --quiet talkkonnect; then
|
||||
echo "Stopping talkkonnect..."
|
||||
sudo systemctl stop talkkonnect
|
||||
log_success "talkkonnect stopped"
|
||||
else
|
||||
echo "Starting talkkonnect..."
|
||||
sudo systemctl start talkkonnect
|
||||
sleep 2
|
||||
if systemctl is-active --quiet talkkonnect; then
|
||||
log_success "talkkonnect started"
|
||||
else
|
||||
log_error "Failed to start - check logs: sudo journalctl -u talkkonnect"
|
||||
fi
|
||||
fi
|
||||
pause
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### RECONFIGURATION
|
||||
################################################################################
|
||||
|
||||
reconfigure_murmur() {
|
||||
echo
|
||||
echo "Reconfigure Murmur Server:"
|
||||
echo " 1. Change welcome text"
|
||||
echo " 2. Change server password"
|
||||
echo " 3. Change SuperUser password"
|
||||
echo " 4. Change port"
|
||||
echo " 0. Cancel"
|
||||
read -r -p "Choose: " reconfig_choice
|
||||
|
||||
local config_file="/etc/mumble-server.ini"
|
||||
|
||||
case "$reconfig_choice" in
|
||||
1)
|
||||
read -r -p "New welcome text: " new_welcome
|
||||
sudo sed -i "s|^welcometext=.*|welcometext=$new_welcome|" "$config_file"
|
||||
sudo systemctl restart mumble-server
|
||||
log_success "Welcome text updated"
|
||||
;;
|
||||
2)
|
||||
read -r -s -p "New server password (blank=none): " new_pass
|
||||
echo
|
||||
sudo sed -i "s|^serverpassword=.*|serverpassword=$new_pass|" "$config_file"
|
||||
sudo systemctl restart mumble-server
|
||||
log_success "Server password updated"
|
||||
;;
|
||||
3)
|
||||
read -r -s -p "New SuperUser password: " su_pass
|
||||
echo
|
||||
sudo systemctl stop mumble-server
|
||||
echo "$su_pass" | sudo murmurd -ini "$config_file" -supw - 2>/dev/null
|
||||
sudo systemctl start mumble-server
|
||||
log_success "SuperUser password updated"
|
||||
;;
|
||||
4)
|
||||
read -r -p "New port [64738]: " new_port
|
||||
new_port="${new_port:-64738}"
|
||||
sudo sed -i "s|^port=.*|port=$new_port|" "$config_file"
|
||||
sudo systemctl restart mumble-server
|
||||
log_success "Port updated to $new_port"
|
||||
;;
|
||||
esac
|
||||
pause
|
||||
}
|
||||
|
||||
reconfigure_talkkonnect() {
|
||||
echo
|
||||
echo "Reconfigure talkkonnect:"
|
||||
echo " 1. Change server"
|
||||
echo " 2. Change credentials"
|
||||
echo " 3. Change channel"
|
||||
echo " 0. Cancel"
|
||||
read -r -p "Choose: " reconfig_choice
|
||||
|
||||
case "$reconfig_choice" in
|
||||
1)
|
||||
read -r -p "Server address: " new_server
|
||||
read -r -p "Port [64738]: " new_port
|
||||
new_port="${new_port:-64738}"
|
||||
sudo -u "$KIOSK_USER" sed -i "s|<server>.*</server>|<server>$new_server</server>|" /home/$KIOSK_USER/talkkonnect.xml
|
||||
sudo -u "$KIOSK_USER" sed -i "s|<port>.*</port>|<port>$new_port</port>|" /home/$KIOSK_USER/talkkonnect.xml
|
||||
sudo systemctl restart talkkonnect
|
||||
log_success "Server updated"
|
||||
;;
|
||||
2)
|
||||
read -r -p "Username: " new_user
|
||||
read -r -s -p "Password: " new_pass
|
||||
echo
|
||||
sudo -u "$KIOSK_USER" sed -i "s|<username>.*</username>|<username>$new_user</username>|" /home/$KIOSK_USER/talkkonnect.xml
|
||||
sudo -u "$KIOSK_USER" sed -i "s|<password>.*</password>|<password>$new_pass</password>|" /home/$KIOSK_USER/talkkonnect.xml
|
||||
sudo systemctl restart talkkonnect
|
||||
log_success "Credentials updated"
|
||||
;;
|
||||
3)
|
||||
read -r -p "Channel: " new_channel
|
||||
sudo -u "$KIOSK_USER" sed -i "s|<channel>.*</channel>|<channel>$new_channel</channel>|" /home/$KIOSK_USER/talkkonnect.xml
|
||||
sudo systemctl restart talkkonnect
|
||||
log_success "Channel updated"
|
||||
;;
|
||||
esac
|
||||
pause
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### LOGS AND DIAGNOSTICS
|
||||
################################################################################
|
||||
|
||||
view_talkkonnect_logs() {
|
||||
echo
|
||||
echo "Recent talkkonnect logs:"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
sudo journalctl -u talkkonnect -n 50 --no-pager
|
||||
echo
|
||||
pause
|
||||
}
|
||||
|
||||
view_murmur_logs() {
|
||||
echo
|
||||
echo "Recent Murmur server logs:"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
sudo journalctl -u mumble-server -n 50 --no-pager
|
||||
echo
|
||||
pause
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### UNINSTALLATION
|
||||
################################################################################
|
||||
|
||||
uninstall_murmur() {
|
||||
echo
|
||||
read -r -p "Uninstall Murmur server? (yes/no): " confirm
|
||||
[[ "$confirm" != "yes" ]] && return
|
||||
|
||||
echo "Uninstalling..."
|
||||
sudo systemctl stop mumble-server 2>/dev/null || true
|
||||
sudo systemctl disable mumble-server 2>/dev/null || true
|
||||
sudo apt remove -y mumble-server 2>/dev/null || true
|
||||
|
||||
read -r -p "Remove configuration and database? (y/n): " remove_data
|
||||
if [[ "$remove_data" =~ ^[Yy]$ ]]; then
|
||||
sudo rm -rf /var/lib/mumble-server
|
||||
sudo rm -f /etc/mumble-server.ini
|
||||
log_success "Murmur and data removed"
|
||||
else
|
||||
log_success "Murmur removed (data preserved)"
|
||||
fi
|
||||
|
||||
pause
|
||||
}
|
||||
|
||||
uninstall_talkkonnect() {
|
||||
echo
|
||||
read -r -p "Uninstall talkkonnect? (yes/no): " confirm
|
||||
[[ "$confirm" != "yes" ]] && return
|
||||
|
||||
echo "Uninstalling..."
|
||||
sudo systemctl stop talkkonnect 2>/dev/null || true
|
||||
sudo systemctl disable talkkonnect 2>/dev/null || true
|
||||
sudo rm -f /etc/systemd/system/talkkonnect.service
|
||||
sudo rm -f /home/$KIOSK_USER/talkkonnect.xml
|
||||
sudo rm -f /home/$KIOSK_USER/go/bin/talkkonnect
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
log_success "talkkonnect uninstalled"
|
||||
pause
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### MAIN MENU
|
||||
################################################################################
|
||||
|
||||
show_status() {
|
||||
local murmur_status=$(check_murmur_status)
|
||||
local murmur_installed=$(echo "$murmur_status" | cut -d: -f1)
|
||||
local murmur_running=$(echo "$murmur_status" | cut -d: -f2)
|
||||
|
||||
local tk_status=$(check_talkkonnect_status)
|
||||
local tk_installed=$(echo "$tk_status" | cut -d: -f1)
|
||||
local tk_running=$(echo "$tk_status" | cut -d: -f2)
|
||||
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " INTERCOM STATUS"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo
|
||||
|
||||
# Murmur status
|
||||
if [[ "$murmur_installed" == "true" ]]; then
|
||||
echo "Murmur Server: ✓ Installed"
|
||||
if [[ "$murmur_running" == "true" ]]; then
|
||||
echo " Status: Running"
|
||||
local server_ip=$(get_ip_address)
|
||||
echo " Address: $server_ip:64738"
|
||||
else
|
||||
echo " Status: Stopped"
|
||||
fi
|
||||
echo
|
||||
else
|
||||
echo "Murmur Server: Not installed"
|
||||
echo
|
||||
fi
|
||||
|
||||
# talkkonnect status
|
||||
if [[ "$tk_installed" == "true" ]]; then
|
||||
echo "talkkonnect Client: ✓ Installed"
|
||||
if [[ "$tk_running" == "true" ]]; then
|
||||
echo " Status: Running"
|
||||
if [[ -f /home/$KIOSK_USER/talkkonnect.xml ]]; then
|
||||
local server=$(grep "serveraddress" /home/$KIOSK_USER/talkkonnect.xml 2>/dev/null | sed 's/.*<server>\(.*\)<\/server>/\1/' || echo "Unknown")
|
||||
echo " Server: $server"
|
||||
fi
|
||||
else
|
||||
echo " Status: Stopped"
|
||||
fi
|
||||
echo
|
||||
else
|
||||
echo "talkkonnect Client: Not installed"
|
||||
echo
|
||||
fi
|
||||
}
|
||||
|
||||
main_menu() {
|
||||
while true; do
|
||||
clear
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " UBK INTERCOM SETUP v${VERSION}"
|
||||
echo " Mumble/Talkkonnect Push-to-Talk System"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
|
||||
show_status
|
||||
|
||||
local murmur_status=$(check_murmur_status)
|
||||
local murmur_installed=$(echo "$murmur_status" | cut -d: -f1)
|
||||
local murmur_running=$(echo "$murmur_status" | cut -d: -f2)
|
||||
|
||||
local tk_status=$(check_talkkonnect_status)
|
||||
local tk_installed=$(echo "$tk_status" | cut -d: -f1)
|
||||
local tk_running=$(echo "$tk_status" | cut -d: -f2)
|
||||
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " INSTALLATION OPTIONS"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
|
||||
local menu_num=1
|
||||
|
||||
# Installation options (shown when nothing installed)
|
||||
if [[ "$murmur_installed" == "false" && "$tk_installed" == "false" ]]; then
|
||||
echo " $menu_num. Install All-in-One (Server + Client)"
|
||||
local opt_all_in_one=$menu_num
|
||||
((menu_num++))
|
||||
echo " $menu_num. Install Murmur Server Only"
|
||||
local opt_server_only=$menu_num
|
||||
((menu_num++))
|
||||
echo " $menu_num. Install talkkonnect Client Only"
|
||||
local opt_client_only=$menu_num
|
||||
((menu_num++))
|
||||
else
|
||||
# Murmur management options
|
||||
if [[ "$murmur_installed" == "true" ]]; then
|
||||
echo
|
||||
echo "Murmur Server:"
|
||||
if [[ "$murmur_running" == "true" ]]; then
|
||||
echo " $menu_num. Stop Murmur"
|
||||
else
|
||||
echo " $menu_num. Start Murmur"
|
||||
fi
|
||||
local opt_murmur_toggle=$menu_num
|
||||
((menu_num++))
|
||||
|
||||
echo " $menu_num. Reconfigure Murmur"
|
||||
local opt_murmur_reconfig=$menu_num
|
||||
((menu_num++))
|
||||
|
||||
echo " $menu_num. View Murmur Logs"
|
||||
local opt_murmur_logs=$menu_num
|
||||
((menu_num++))
|
||||
|
||||
echo " $menu_num. Uninstall Murmur"
|
||||
local opt_murmur_uninstall=$menu_num
|
||||
((menu_num++))
|
||||
else
|
||||
echo
|
||||
echo " $menu_num. Install Murmur Server"
|
||||
local opt_install_murmur=$menu_num
|
||||
((menu_num++))
|
||||
fi
|
||||
|
||||
# talkkonnect management options
|
||||
if [[ "$tk_installed" == "true" ]]; then
|
||||
echo
|
||||
echo "talkkonnect Client:"
|
||||
if [[ "$tk_running" == "true" ]]; then
|
||||
echo " $menu_num. Stop talkkonnect"
|
||||
else
|
||||
echo " $menu_num. Start talkkonnect"
|
||||
fi
|
||||
local opt_tk_toggle=$menu_num
|
||||
((menu_num++))
|
||||
|
||||
echo " $menu_num. Reconfigure talkkonnect"
|
||||
local opt_tk_reconfig=$menu_num
|
||||
((menu_num++))
|
||||
|
||||
echo " $menu_num. View talkkonnect Logs"
|
||||
local opt_tk_logs=$menu_num
|
||||
((menu_num++))
|
||||
|
||||
echo " $menu_num. Uninstall talkkonnect"
|
||||
local opt_tk_uninstall=$menu_num
|
||||
((menu_num++))
|
||||
else
|
||||
echo
|
||||
echo " $menu_num. Install talkkonnect Client"
|
||||
local opt_install_tk=$menu_num
|
||||
((menu_num++))
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo " 0. Exit"
|
||||
echo "═══════════════════════════════════════════════════════════════"
|
||||
echo
|
||||
read -r -p "Choose [0-$((menu_num-1))]: " choice
|
||||
|
||||
# Handle menu selection
|
||||
case "$choice" in
|
||||
0)
|
||||
echo "Exiting..."
|
||||
exit 0
|
||||
;;
|
||||
${opt_all_in_one:-})
|
||||
install_murmur_and_talkkonnect
|
||||
;;
|
||||
${opt_server_only:-})
|
||||
install_murmur_server
|
||||
;;
|
||||
${opt_client_only:-})
|
||||
install_talkkonnect_only
|
||||
;;
|
||||
${opt_install_murmur:-})
|
||||
install_murmur_server
|
||||
;;
|
||||
${opt_install_tk:-})
|
||||
install_talkkonnect_only
|
||||
;;
|
||||
${opt_murmur_toggle:-})
|
||||
toggle_murmur_service
|
||||
;;
|
||||
${opt_murmur_reconfig:-})
|
||||
reconfigure_murmur
|
||||
;;
|
||||
${opt_murmur_logs:-})
|
||||
view_murmur_logs
|
||||
;;
|
||||
${opt_murmur_uninstall:-})
|
||||
uninstall_murmur
|
||||
;;
|
||||
${opt_tk_toggle:-})
|
||||
toggle_talkkonnect_service
|
||||
;;
|
||||
${opt_tk_reconfig:-})
|
||||
reconfigure_talkkonnect
|
||||
;;
|
||||
${opt_tk_logs:-})
|
||||
view_talkkonnect_logs
|
||||
;;
|
||||
${opt_tk_uninstall:-})
|
||||
uninstall_talkkonnect
|
||||
;;
|
||||
*)
|
||||
echo "Invalid choice"
|
||||
sleep 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
################################################################################
|
||||
### ENTRY POINT
|
||||
################################################################################
|
||||
|
||||
# Check if running as root
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
log_error "This script should not be run as root"
|
||||
echo "Please run as: ./setup_intercom.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if kiosk user exists
|
||||
if ! id "$KIOSK_USER" &>/dev/null; then
|
||||
log_warning "User '$KIOSK_USER' does not exist"
|
||||
read -r -p "Enter the username to use for installation: " KIOSK_USER
|
||||
|
||||
if ! id "$KIOSK_USER" &>/dev/null; then
|
||||
log_error "User '$KIOSK_USER' not found"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run main menu
|
||||
main_menu
|
||||
Reference in New Issue
Block a user