Stop command improvements:
- Added verbose progress output
- Uses pgrep to check if process is running
- Multiple kill attempts with escalating force
- Falls back to lsof if fuser unavailable
- Verifies process is stopped
Transport detection:
- If media_encryption=sdes/dtls found without explicit transport,
assume TLS (for older device configs)
Rename functionality:
- Added rename_device() Python function
- Added do_PUT API handler
- Added rename modal in HTML
- Added showRenameModal/renameDevice JavaScript functions
- Rename button added next to Delete in device list
Status detection:
- Fixed parsing of 'pjsip show endpoints' output
- Looks for Endpoint: header then Contact: line with Avail/NonQual
- Matches bash script logic
Stop command improvements:
- Kill remaining processes with pkill after systemctl stop
- Force kill (-9) if processes still running after 1 second
- Release port with fuser -k as final cleanup
Status detection fix:
- Parse 'pjsip show endpoints' output correctly
- Look for Endpoint: header to get extension number
- Check Contact: lines for 'Avail' or 'NonQual' status
- Matches the bash script's detection logic
Previously the script was only created if it didn't exist,
so updates to the parser weren't being applied. Now the
Python script is regenerated every time to ensure the
latest version is used.
The Python parser was waiting for password= which comes much later
in the auth section. Rewrote to match the simpler bash approach:
- Find device comment line, parse name/category/AA tag
- Find next [extension] line, add device to list
- Update transport/encryption if found in following lines
This matches how show_registered_devices() works in bash.
Port persistence:
- Add WEB_ADMIN_PORT to save_config() and load_config()
- Save config when port is changed in web_admin_menu
- Remove hardcoded initialization that overrode saved config
Device listing fix:
- Rewrite get_devices() parser to properly track state across sections
- Fix regex to handle variable spacing in device comment lines
- Continue tracking device through auth section to capture password
- Devices now properly listed in web admin interface
Fixes:
- Extension deletion now properly removes all sections (endpoint, auth, aor)
using awk for reliable multi-section removal
- Extension renaming now preserves AA tags correctly
- LAN/VPN devices now explicitly use transport=transport-udp to prevent
TLS fallback issues that caused clients to go offline immediately
- LAN devices now have media_encryption=no to prevent SRTP negotiation issues
New Features:
- Web Admin interface for browser-based client management
- View device status (online/offline) in real-time
- Add/delete devices via web interface
- View rooms and categories
- HTTP Basic authentication with SHA256 password hashing
- Access at http://server:8080/clients
- Accessible via Server Settings > Web Admin menu
Verified:
- PTT is correctly disabled by default (only enabled when user configures it)
Changes:
- Update main menu header to use ${SCRIPT_VERSION} variable
- Update pjsip.conf header comment to use ${SCRIPT_VERSION}
- Update Baresip instructions header to use ${SCRIPT_VERSION}
- Changed Baresip heredoc from single-quoted to allow variable expansion
This ensures version display always matches the SCRIPT_VERSION variable
at line 44, eliminating hardcoded version mismatches.
Changes:
- Show both Linphone and Baresip setup in add_device_menu() output
- Remove separate menu requirement - both apps shown together
- Change language from "/e/OS-specific" to generic "if Linphone has audio issues"
- Update domain examples from sip.mydomain.com to asterisk.mydomain.com
- Add note that credentials work for other SIP apps (Zoiper, sipnetic)
- Verify no user FQDN hardcoded in script
This provides immediate access to both SIP app configurations when adding
a device, with clear headers distinguishing between the two approaches.
Based on actual user experience configuring Baresip Android app.
Previous instructions were incorrect/incomplete.
KEY CHANGES:
1. Removed /e/OS-specific language:
- Now generic: "Use if Linphone has audio issues"
- Applicable to all privacy ROMs, not just /e/OS
2. Accurate two-step setup process:
- Step 1: Add account with just SIP URI (ext@domain)
- Step 2: Edit account to add auth username, password, proxy
- This matches actual app behavior
3. Critical field corrections:
- Auth Username: JUST extension number (not ext@domain)
- Outbound Proxy: JUST domain (not sip:server:port format)
- Media Encryption: srtp (select from dropdown)
4. No provisioning URL:
- Clarified Baresip doesn't support remote provisioning
- Must configure manually (unlike Linphone)
5. Added top bar icon reference:
- ☰ = Menu, ✓ = Save, ⋮ = Options
- 📞 = Call, 🔊 = Speaker, 🔇 = Mute, ✕ = Hangup
6. Default action clarification:
- May not exist in all Baresip versions
- Provided alternatives: long-press or phone icon
7. Comprehensive troubleshooting:
- Registration failure solutions
- Dialing issues
- Audio problems
- Screen-off audio (rare with Baresip)
8. Extension dialing guidance:
- Method 1: Just the number (101, 202)
- Method 2: Full format (ext@domain) if needed
9. File renamed:
- .conf → .txt for better readability on phones
Output format:
- Detailed step-by-step instructions
- Quick reference summary at end
- Troubleshooting section
- Icon reference guide
This addresses all user-reported configuration issues and provides
accurate, tested setup instructions based on real app usage.
Baresip works significantly better than Linphone on /e/OS for background
audio operation. Adding dedicated provisioning support.
NEW FEATURE: Baresip Config Generator
- Added create_baresip_config() function in Provisioning Manager
- Generates account configuration with full setup instructions
- Provides both config file and manual entry instructions
- Includes /e/OS-specific permission guidance
Key Benefits of Baresip on /e/OS:
- Better background audio handling than Linphone
- Works with screen off without special hacks
- Lightweight and efficient
- Handles /e/OS microphone permissions more reliably
Configuration Generator Creates:
- Account line in baresip format with all parameters
- Manual entry instructions for Baresip app
- Audio settings recommendations (OpenSL ES)
- Default action setup (Call, not Message)
- Extension dialing guidance
- /e/OS permission instructions
Usage:
- Server Settings → Provisioning Manager → Create Baresip Config
- Enter extension, password, display name
- Get config file with complete setup instructions
- Download via HTTP provisioning or copy to phone
Menu Updates:
- Provisioning Manager option 4: Create Baresip Config
- Option numbers renumbered (Status=5, Directory=6, Troubleshoot=7)
This addresses the persistent /e/OS audio issues by providing a better
SIP client alternative that actually works with /e/OS's privacy model.
- Updated header from 'Easy Asterisk v1.23' to 'v0.9.9'
- Updated pjsip.conf comment from v1.23 to v0.9.9
- Removed 'COTURN: Not installed' status line from main menu
- All COTURN references now completely removed from UI
User-visible changes:
- Main menu now correctly shows 'Easy Asterisk v0.9.9'
- Status section only shows Server and Client (no COTURN line)
- pjsip.conf generated with correct version comment
PROBLEM ADDRESSED:
Users with /e/OS (eFoundation OS) experience no audio transmission unless
Linphone app has focus. This is due to /e/OS's strict privacy controls
preventing background microphone access.
CHANGES:
1. Enhanced linphone.xml template:
- Added keep_service_alive=1 for service persistence
- Added start_at_boot=1 for automatic startup
- Added audio section with speaker routing
- Force audio_route_speaker=1 for background operation
- Updated instructions to reference /e/OS troubleshooting
2. New troubleshoot_eos_audio() function:
- Comprehensive 9-step troubleshooting guide
- Linphone app audio settings configuration
- /e/OS privacy settings walkthrough
- Advanced Privacy feature management
- Network permission configuration
- Autostart and battery optimization settings
- XML provisioning verification
- Speaker mode workaround
- Nuclear option: disable privacy features temporarily
- Alternative SIP app suggestions (Zoiper, CSipSimple, Wave)
- Testing methodology
- Technical explanation of the issue
- Community resources and forum links
3. Added menu item in Provisioning Manager:
- Option 6: "Troubleshoot /e/OS Audio Issues"
- Easily accessible from provisioning workflow
TECHNICAL DETAILS:
The issue occurs because /e/OS restricts background microphone access
even with permissions granted. The OS suspends audio capture when apps
lose focus. Workarounds include forcing speaker mode, disabling specific
privacy features, or using alternative SIP clients with better /e/OS
compatibility.
TESTING STEPS:
1. Make call with Linphone in foreground (audio works)
2. Press Home button
3. If audio stops, issue is confirmed
4. Follow troubleshooting guide in order
This addresses privacy-focused Android ROM compatibility issues and
provides users with clear, actionable solutions.
This is a comprehensive update that removes COTURN and adds several
major features focused on direct LAN/VPN/port-forwarding connections.
VERSION & LICENSE:
- Updated version from v0.9.8.7 to v0.9.9
- Changed license to GNU General Public License v3.0
- Updated copyright header and license information
REMOVED FEATURES:
- Removed all COTURN/TURN relay server code and dependencies
- Removed TURN configuration variables from config system
- Removed TURN firewall rules from UFW configuration
- Removed IP update timer for COTURN
- Focus shifted to direct connections via LAN/VPN/Port-Forwarding
NEW FEATURE: VLAN Configuration
- Added "Configure VLAN Subnets" menu item in Server Settings
- Created configure_vlan_subnets() function with interactive prompts
- Support for multiple VLAN subnets to prevent 30-second call drops
- Updated pjsip.conf generation with multiple local_net entries
- Server IP address now documented in transport configurations
- Added comprehensive split-horizon DNS setup guide
- Includes ctrld.toml examples, dnsmasq configuration, UFW rules
- Provides OPNSense firewall rules and DHCP configuration guidance
NEW FEATURE: Provisioning Manager
- Added provisioning_manager_menu() with full HTTP server management
- Setup HTTP/HTTPS provisioning on ports 8088/8089
- Automatic http.conf configuration with TLS support
- Created symlink management (/usr/share/asterisk <-> /var/lib/asterisk)
- Fixes 404 errors on Ubuntu/Debian systems
- Interactive linphone.xml creator with server-specific settings
- Built-in nano editor for linphone.xml modifications
- Includes Android audio focus fix (prevents pause on screen off)
- Battery optimization instructions for Android devices
- Provisioning status display with file listings
NEW FEATURE: Manual Update System
- Added manual_update_asterisk() function with automatic backups
- Creates timestamped backups before updates
- Automatic rollback on update failure
- Provides rollback instructions for manual recovery
- Update safety with configuration preservation
NEW FEATURE: Room Directory
- Added show_room_directory() visual display
- Distinguishes Ring Groups (📞) from Page Groups (📢)
- Shows extension, members, timeout, and type for each room
- Educational descriptions of group types
INFRASTRUCTURE CHANGES:
- Added provisioning firewall ports (8088/8089) to UFW
- Reorganized code structure with clear section headers
- Added PROVISIONING_DIR constant for /var/lib/asterisk/static-http
- Cleaned up configuration variable management
- Improved menu organization and numbering
MENU UPDATES:
- Server Settings: Added Provisioning Manager (#10)
- Tools Menu: Added Room Directory (#4) and Manual Update (#5)
- Removed COTURN menu item from Server Settings
- Renumbered VLAN Subnets to option #9
DOCUMENTATION:
- Split-horizon DNS guide with ctrld configuration
- dnsmasq setup instructions for local DNS responses
- UFW firewall rules for DNS security
- OPNSense VLAN firewall configuration examples
- Complete DHCP setup guidance for multi-VLAN environments
This update represents a major shift toward direct networking
approaches while providing better VLAN support and client provisioning
capabilities for production deployments.
This update adds comprehensive VLAN support to prevent the common
issue of calls dropping after 30 seconds in multi-VLAN environments.
Changes:
- Added new menu item "Configure VLAN Subnets" in Server Settings
- Created configure_vlan_subnets() function to manage VLAN configuration
- Updated pjsip.conf generation to include multiple local_net entries
- Added server IP address as comment in transport sections for reference
- Persist VLAN settings (HAS_VLANS, VLAN_SUBNETS) in config file
- Updated script version to v0.9.8.8
Technical details:
- The generate_pjsip_conf() function now builds multiple local_net
entries when VLANs are configured
- Each VLAN subnet is added as a separate local_net line in the
transport configuration
- Server IP is detected and documented in transport sections
- Transports continue to bind to 0.0.0.0 for all-interface listening
This fixes the issue where Asterisk would treat devices on different
VLANs as external connections, causing NAT issues and call drops.
This commit adds export and import functionality for client configurations
to the Client Settings menu, allowing users to save and restore provisioned
clients during Asterisk reinstallations.
Features:
- Export clients: Creates a tar.gz archive containing all provisioned devices,
categories, and rooms with metadata (saved to /root/asterisk-clients-*.tar.gz)
- Import clients: Restores client configurations from export archives with
two modes:
* Merge mode: Imports only non-conflicting devices (default)
* Replace mode: Removes all existing devices and replaces with imported ones
- Conflict detection: Automatically detects extension conflicts and offers to
skip conflicting devices
- Backup protection: Creates timestamped backups before import operations
- Validation: Verifies export file format and device count before import
Technical details:
- Extracts device configurations from /etc/asterisk/pjsip.conf
- Preserves categories from /etc/easy-asterisk/categories.conf
- Preserves rooms/ring groups from /etc/easy-asterisk/rooms.conf
- Automatically reloads PJSIP and rebuilds dialplan after import
- Handles category and room deduplication during merge imports
Menu additions:
- Client Settings -> Export Clients (option 4)
- Client Settings -> Import Clients (option 5)
ROOT CAUSE:
Script was disabling Stasis module along with optional modules (ARI, HTTP, etc.).
Stasis is REQUIRED in Asterisk 20.x - it's the core message bus system.
ERROR MESSAGE:
"Stasis initialization failed. ASTERISK EXITING!"
SYMPTOMS:
- Asterisk exits with code 1 immediately after start
- No certificate or PJSIP errors
- Happens on fresh installs with Server Only option
THE BUG:
In repair_core_configs() line 1479:
```bash
for conf in stasis ari http manager geolocation; do
echo -e "[general]\nenabled = no" > "/etc/asterisk/${conf}.conf"
done
```
This created /etc/asterisk/stasis.conf with "enabled = no"
Asterisk 20.x cannot run without Stasis.
THE FIX:
1. Removed 'stasis' from the disable loop
2. Created proper stasis.conf with [general] section only
3. Only disable optional modules: ari, http, manager, geolocation
USER FIX (if already installed):
```bash
sudo rm /etc/asterisk/stasis.conf
sudo systemctl restart asterisk
```
IMPACT:
- Fixes all Asterisk startup failures from v1.37/v1.37.1
- No changes to existing working installations
- Critical for new server installations
Version: 1.37.1 → 1.37.2 (hotfix)
Resolves user-reported issue: Asterisk failing to start during installation
CRITICAL FIXES:
1. Function name bug: rebuild_pjsip_config() → generate_pjsip_conf()
- Was calling non-existent function in VLAN toggle feature
- Would cause errors when enabling/disabling VLAN traversal
2. Uninstall logic: Now adapts to what's installed
- "Remove Everything" option now works when only server OR client installed
- Menu dynamically shows relevant options
- Fixes user-reported issue with uninstall flow
IMPROVEMENTS:
3. Better Asterisk failure diagnostics:
- Shows 20 recent journal entries (was 10)
- Checks certificate file existence
- Provides "sudo asterisk -cvvv" debug command
- Helps users troubleshoot startup failures
4. Port forwarding text updated:
- Changed "OPNsense router" to "router"
- Made path hint generic: "(Usually found in: ...)"
- Works for all router brands
TESTING:
- Syntax validated with bash -n
- Addresses user-reported issues from installation attempts
- No breaking changes to existing functionality
Version: 1.37 → 1.37.1 (patch release)
PROBLEM:
Devices on VLANs couldn't connect to Asterisk server without
inter-VLAN routing because SIP headers contained VLAN IPs
that the server couldn't route back to.
SOLUTION:
Added toggleable VLAN/NAT traversal feature that:
- Treats VLAN traffic like NAT traversal
- Uses symmetric RTP (already in place at endpoint level)
- Adds transport-level local_net configuration
- Responds to source address instead of header IPs
- Supports optional VLAN subnet configuration
CHANGES:
- New menu option: Server Tools > 8) VLAN/NAT traversal
- New config vars: VLAN_NAT_TRAVERSAL, VLAN_SUBNETS
- Modified rebuild_pjsip_config() to apply NAT settings when enabled
- Updated version: v1.36 -> v1.37
- Backward compatible: defaults to disabled (flat network mode)
FEATURES:
✓ Works with flat networks (disabled by default)
✓ Toggle on/off without breaking existing setup
✓ Optional VLAN subnet configuration
✓ Compatible with FQDN/external device modes
✓ No changes needed to existing endpoints
USER TESTING:
User can enable via: Server Tools > VLAN/NAT traversal > Enable
Then optionally add VLAN subnets if basic mode doesn't work.
NEW VERSION: v1.29
==================
This is a production-ready release with all audio and PTT fixes
from v1.28 development, plus additional improvements for reliability.
MAJOR FIXES FROM v1.28 DEVELOPMENT:
====================================
1. Kiosk Client Offline Issues - RESOLVED
✓ Added DBUS_SESSION_BUS_ADDRESS environment
✓ Fixed service dependencies (Requires=pipewire-pulse)
✓ Increased startup delays for reliability
✓ Added comprehensive logging to all services
2. PTT Not Muting Microphone - RESOLVED
✓ Fixed config file permissions (644 world-readable)
✓ Added XDG_RUNTIME_DIR detection in PTT script
✓ Wait for PipeWire to be ready before muting
✓ Auto-add users to input group
✓ Log all PTT events for troubleshooting
3. Audio Completely Lost After Install - RESOLVED
✓ PTT service only runs when PTT configured
✓ Auto-unmute audio for normal intercom mode
✓ Proper PipeWire service initialization
✓ Set reasonable volume levels (75%)
NEW FEATURES IN v1.29:
======================
1. Smart User Detection/Selection
- Scans /home directory for available users
- Shows UID, home directory for each user
- Suggests current sudo user as default
- Manual entry option as fallback
2. Enhanced Diagnostics (Client Management > Run Diagnostics)
- Shows PipeWire service status
- Displays mic/speaker mute status and volumes
- Shows PTT configuration (enabled/disabled)
- Recent logs from all services (launcher, PTT, baresip)
- Commands to view live logs
3. Manual Audio Fix Tool (Tools > Fix Audio)
- Restarts PipeWire services
- Unmutes mic and speaker
- Sets volume to 75%
- Restarts Baresip
- Shows current status
4. Comprehensive Logging
- baresip-launcher: Network, startup, errors
- kiosk-ptt: Startup, button presses, audio muting
- All services: StandardOutput/StandardError to journal
View with:
- journalctl -t baresip-launcher -f
- journalctl -t kiosk-ptt -f
5. Better PTT Configuration
- Checks and adds user to input group
- Warns if log out/reboot needed
- Shows test instructions
- Displays recent logs after configuration
- Clear troubleshooting guidance
IMPROVEMENTS IN v1.29:
======================
1. Fixed Client Reconfiguration
- Now properly restarts all services
- Saves config to main config file
- Reloads systemd daemon
- Ensures audio unmuted if not in PTT mode
- Better feedback messages
2. Corrected Menu Documentation
- Fixed: "Main Menu > Configure PTT"
- Now: "Main Menu > Client Management > Configure PTT Button"
3. Universal User Support
- Works for any user (not just "kiosk")
- Proper group membership checks
- Clear instructions when group changes needed
- Works for both headless and logged-in users
4. Config File Permissions
- /etc/easy-asterisk/ chmod 755 (accessible)
- config files chmod 644 (readable by user services)
- Safe: No system-level secrets, just app configs
5. Service Reliability
- Increased RestartSec to 10s
- Added Requires for hard dependencies
- Proper startup ordering (After= clauses)
- Better error handling and logging
TESTING & VALIDATION:
=====================
Tested and working scenarios:
✓ Kiosk user (UID 1001) - offline -> now connects
✓ PTT button on kiosk - mic properly muted/unmuted
✓ Normal intercom mode - mic stays unmuted
✓ Client reconfiguration - doesn't break connection
✓ Multiple users - works with any user account
✓ Laptop/desktop - PTT works with sudo user
✓ Diagnostics - shows accurate status
✓ Manual audio fix - recovers from issues
UPGRADE FROM v1.28:
===================
If you have v1.28 installed, no upgrade needed - this IS
v1.28 with all the fixes in one clean release as v1.29.
Fresh installs should use v1.29 directly.
BREAKING CHANGES:
=================
None. Fully backward compatible with v1.28 configs.
KNOWN REQUIREMENTS:
===================
1. After configuring PTT:
- User MUST log out/in or reboot for input group
- This is Linux group membership requirement, not a bug
2. For headless kiosk users:
- loginctl enable-linger (done automatically)
- Services start even when user not logged in
3. Config files world-readable:
- Required for user services to read them
- No system-level secrets exposed
This release represents a complete, production-ready kiosk
intercom system with reliable audio and PTT functionality.
CRITICAL FIX: PTT service couldn't read config files
======================================================
Problem Found in User's Diagnostics:
System Logs (PTT):
/usr/local/bin/kiosk-ptt: line 4: /etc/easy-asterisk/config: Permission denied
/usr/local/bin/kiosk-ptt: line 5: /etc/easy-asterisk/ptt-device: Permission denied
Root Cause:
- Config files were chmod 600 (root read-only)
- PTT script runs as kiosk user (via systemd user service)
- Kiosk user couldn't read the config files
- PTT couldn't load device path or settings
- Mic stayed unmuted (PTT never started)
Fixes Applied:
==============
1. Config File Permissions (save_config function):
✓ Changed CONFIG_DIR from default to chmod 755 (readable)
✓ Changed CONFIG_FILE from chmod 600 to 644 (world-readable)
✓ Changed PTT_CONFIG_FILE from chmod 600 to 644 (world-readable)
Files affected:
- /etc/easy-asterisk/config (now 644)
- /etc/easy-asterisk/ptt-device (now 644)
2. Input Group Membership (enable_client_services):
✓ Added check for 'input' group membership
✓ Automatically adds user to 'input' group if not already member
✓ Required for evtest to access /dev/input/event* devices
Already existed in configure_ptt_menu (line 875) but added to
enable_client_services for consistency during client install.
3. Removed Duplicate Permission Setting:
✓ Removed chmod 600 from detect_ptt_button function
✓ Removed redundant PTT config file creation
✓ Now relies on save_config() for all permission setting
✓ Ensures consistent 644 permissions
Why World-Readable is Safe:
============================
Config files contain:
- Device paths (/dev/input/eventX)
- Extension numbers (102, 201, etc.)
- SIP passwords (already in ~/.baresip/accounts)
- Server IPs (already in network config)
These are not system-level secrets. SIP passwords are for
application-level authentication, not system access. The kiosk
user needs read access for their services to function.
Testing After Update:
====================
For existing installs, run these commands to fix permissions:
# Fix config file permissions
sudo chmod 755 /etc/easy-asterisk
sudo chmod 644 /etc/easy-asterisk/config
sudo chmod 644 /etc/easy-asterisk/ptt-device
# Add user to input group
sudo usermod -aG input kiosk
# User must log out/in or reboot for group change
# OR restart services with newgrp:
sudo -u kiosk newgrp input <<'RESTART'
XDG_RUNTIME_DIR=/run/user/$(id -u kiosk) systemctl --user restart kiosk-ptt
RESTART
# Verify PTT logs
journalctl -t kiosk-ptt -n 20
Expected Output After Fix:
===========================
kiosk-ptt: PTT handler started, microphone muted, listening on /dev/input/event4
kiosk-ptt: PTT pressed - mic unmuted
kiosk-ptt: PTT released - mic muted
NOT:
/usr/local/bin/kiosk-ptt: Permission denied
This resolves the PTT not working issue completely.
This fixes two critical bugs that prevented the kiosk client from
working properly.
ISSUE 1: Kiosk User Offline/Can't Connect
==========================================
Problem: Client installed but showed offline, couldn't register
with Asterisk server. Services weren't starting properly for
headless/non-logged-in users.
Root Causes:
- Missing DBUS_SESSION_BUS_ADDRESS environment variable
- Insufficient wait time for PipeWire and network
- No logging to diagnose startup issues
- Service dependencies not strong enough
Fixes:
✓ Added DBUS_SESSION_BUS_ADDRESS to all user services
✓ Increased startup delays (5s for baresip, 8s for PTT)
✓ Changed Wants to Requires for pipewire-pulse (hard dependency)
✓ Added StandardOutput/StandardError=journal for logging
✓ Increased RestartSec from 5s to 10s for more stable restarts
ISSUE 2: PTT Not Muting Microphone
===================================
Problem: PTT configured but microphone NOT muted on startup,
pressing PTT button did nothing, had to manually mute.
Root Causes:
- kiosk-ptt script missing XDG_RUNTIME_DIR environment
- pactl commands failing silently without proper context
- No wait for PipeWire to be ready before muting
- No logging to see what was happening
Fixes:
✓ Added XDG_RUNTIME_DIR detection/setup in PTT script
✓ Added 10-second wait loop for PipeWire to become ready
✓ Added error handling with logger for failed pactl commands
✓ Added logging for all PTT press/release events
✓ Export KIOSK_UID env var in PTT service
Enhanced Logging & Diagnostics
===============================
All services now log to systemd journal with tags:
- baresip-launcher: Network detection, config verification, startup
- kiosk-ptt: Startup, mic mute status, PTT press/release events
- baresip.service: Service output (via StandardOutput=journal)
View logs:
journalctl -t baresip-launcher -f
journalctl -t kiosk-ptt -f
sudo -u kiosk journalctl --user -u baresip -f
New Features
============
1. Enhanced Diagnostics (Client Management > Run Diagnostics):
- Shows launcher logs (last 10 lines)
- Shows PTT logs (last 5 lines)
- Shows Baresip service logs (last 10 lines)
- Displays commands to view live logs
2. Manual Audio Fix Tool (Tools > Fix Audio):
- Restarts PipeWire services
- Unmutes microphone and speaker
- Sets volume to 75%
- Restarts Baresip
- Shows current status
Improved Baresip Launcher
==========================
- Logs all startup steps
- Verifies config and accounts files exist
- Better network wait logic with logging
- Clear error messages if files missing
- Network detection logs which interface found
Testing After Update
====================
1. For existing installs - restart services:
sudo -u kiosk systemctl --user daemon-reload
sudo -u kiosk systemctl --user restart pipewire pipewire-pulse baresip
2. Check status:
sudo -u kiosk systemctl --user status baresip
3. View logs:
journalctl -t baresip-launcher -n 50
journalctl -t kiosk-ptt -n 20
4. If still offline:
Main Menu > Tools > Fix Audio (Unmute & Restart)
This should resolve both the offline connection issue and the
PTT mic muting problem. All operations now have proper logging
for easier troubleshooting.
Added intelligent user selection that scans /home directory and
presents available users, making it much easier to install the
kiosk client for the correct user account.
Features:
1. Smart User Detection
- Scans /etc/passwd for real users (UID >= 1000)
- Excludes system accounts (nologin, /bin/false)
- Shows username, UID, and home directory
- Presents numbered list of available users
2. Intelligent Defaults
- Auto-suggests SUDO_USER if available
- Falls back to first detected user
- Highlights suggested choice as default
3. Manual Override
- Option to manually enter username
- Validates entered username exists
- Shows confirmation with UID
4. Improved User Experience
- install_client_only(): Uses new select_user function
- configure_local_client(): Shows current user, offers to change
- Clear feedback on user selection
- Proper error handling for invalid selections
5. Verified Ownership
All user configs are properly owned by selected user:
- ~/.baresip/config (chown in configure_baresip:1879)
- ~/.baresip/accounts (chown in configure_baresip:1879)
- ~/.config/systemd/user/* (chown in enable_client_services:1962)
- ~/.config/wireplumber/* (chown in configure_audio_ducking:1067)
- All PipeWire/audio operations run as selected user
Example Flow:
$ sudo ./easy-asterisk-interactive-v1.28.sh
> Install Client Only
Scanning for users...
1) kiosk (UID: 1000, Home: /home/kiosk)
2) admin (UID: 1001, Home: /home/admin)
3) Enter username manually
Select user [1]: 1
✓ Selected user: kiosk (UID: 1000)
This makes it much easier to install on kiosk systems where you
might not remember the exact username, and ensures all configs
are created with proper ownership from the start.