#!/bin/bash # ============================================================================== # OBS Performance Optimizer for Linux Mint (Cinnamon) # # Temporarily disables desktop effects and compositor overhead while OBS is # running, then restores everything when OBS closes. This frees up GPU # resources for encoding and reduces frame drops during recording/streaming. # # What it does while OBS is running: # - Disables the Cinnamon compositor (no transparency, shadows, animations) # - Enables fullscreen unredirect (bypasses compositor for fullscreen apps) # - Disables VSync (reduces input lag, frees GPU cycles) # - Sets CPU governor to performance (maximum clock speed) # - Sets GPU-friendly environment variables (threaded GL, no vsync) # - Reduces PulseAudio latency for better audio sync # # When OBS closes, ALL settings are automatically restored to their # original values. Your desktop goes back to normal. # # Usage: # chmod +x obs-performance-script.sh # ./obs-performance-script.sh # ============================================================================== # Color codes for output GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo -e "${GREEN}OBS Performance Optimizer for Linux Mint Cinnamon${NC}" echo "==================================================" # Check if OBS is installed if ! command -v obs-studio &> /dev/null && ! command -v flatpak run com.obsproject.Studio &> /dev/null; then echo -e "${RED}Error: OBS Studio not found!${NC}" echo "Install with: sudo apt install obs-studio" echo "Or: flatpak install flathub com.obsproject.Studio" exit 1 fi # Detect OBS installation type if command -v obs-studio &> /dev/null; then OBS_COMMAND="obs-studio" elif flatpak list | grep -q "com.obsproject.Studio"; then OBS_COMMAND="flatpak run com.obsproject.Studio" else OBS_COMMAND="obs" # fallback fi # Store original settings (using correct keys for newer Cinnamon) echo -e "${YELLOW}Saving current desktop settings...${NC}" # Check Cinnamon version and use appropriate settings if gsettings list-keys org.cinnamon.desktop.wm.preferences | grep -q "compositor-manager"; then # Newer Cinnamon ORIGINAL_COMPOSITOR=$(gsettings get org.cinnamon.desktop.wm.preferences compositor-manager 2>/dev/null || echo "true") COMPOSITOR_KEY="org.cinnamon.desktop.wm.preferences compositor-manager" else # Try muffin settings ORIGINAL_COMPOSITOR="true" COMPOSITOR_KEY="" fi ORIGINAL_UNREDIRECT=$(gsettings get org.cinnamon.muffin unredirect-fullscreen-windows 2>/dev/null || echo "false") echo "Unredirect: $ORIGINAL_UNREDIRECT" # Apply performance settings echo -e "\n${YELLOW}Applying performance optimizations...${NC}" # Disable effects using available methods if [ -n "$COMPOSITOR_KEY" ]; then gsettings set $COMPOSITOR_KEY false 2>/dev/null && echo -e "${GREEN}✓ Compositor disabled${NC}" else # Alternative: disable effects gsettings set org.cinnamon enable-effects false 2>/dev/null && echo -e "${GREEN}✓ Desktop effects disabled${NC}" fi # Set unredirect for fullscreen gsettings set org.cinnamon.muffin unredirect-fullscreen-windows true 2>/dev/null && echo -e "${GREEN}✓ Fullscreen unredirect enabled${NC}" # Alternative compositor control for Cinnamon if command -v cinnamon-settings &> /dev/null; then # Try to disable vsync through muffin dconf settings dconf write /org/cinnamon/muffin/sync-to-vblank false 2>/dev/null fi # Set CPU governor to performance if available if [ -f /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ]; then echo -e "\n${YELLOW}Setting CPU to performance mode (may require password)${NC}" echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor > /dev/null 2>&1 if [ $? -eq 0 ]; then echo -e "${GREEN}✓ CPU performance mode set${NC}" fi fi # Launch OBS with optimized environment echo -e "\n${GREEN}Launching OBS with optimized settings...${NC}" echo "===========================================" echo "Using command: $OBS_COMMAND" # Run OBS with performance environment variables env vblank_mode=0 \ __GL_SYNC_TO_VBLANK=0 \ __GL_THREADED_OPTIMIZATIONS=1 \ PULSE_LATENCY_MSEC=30 \ $OBS_COMMAND # Restore original settings after OBS closes echo -e "\n${YELLOW}OBS closed. Restoring original settings...${NC}" if [ -n "$COMPOSITOR_KEY" ]; then gsettings set $COMPOSITOR_KEY "$ORIGINAL_COMPOSITOR" 2>/dev/null else gsettings set org.cinnamon enable-effects true 2>/dev/null fi gsettings set org.cinnamon.muffin unredirect-fullscreen-windows "$ORIGINAL_UNREDIRECT" 2>/dev/null # Restore vsync if it was modified dconf write /org/cinnamon/muffin/sync-to-vblank true 2>/dev/null echo -e "${GREEN}✓ Desktop settings restored${NC}" echo -e "${GREEN}Done!${NC}"