How to record your screen in Linux
How to Record Your Screen in Linux
Screen recording has become an essential tool for creating tutorials, documenting software bugs, sharing gameplay, and presenting demonstrations. Linux users have access to numerous powerful screen recording applications, ranging from simple point-and-click solutions to advanced streaming software. This comprehensive guide will walk you through the best screen recording methods available for Linux systems, helping you choose the right tool for your specific needs.
Whether you're a content creator, developer, educator, or simply need to capture your screen for documentation purposes, this article covers everything from basic recording setup to advanced configuration options and troubleshooting common issues.
Why Screen Recording Matters in Linux
Screen recording in Linux serves multiple purposes across different user communities. Developers often use screen recordings to demonstrate software functionality or report bugs with visual context. Content creators rely on screen capture for tutorials, reviews, and educational content. System administrators use recordings to document procedures and create training materials.
Linux's open-source nature provides users with numerous free alternatives to expensive proprietary screen recording software, often with more customization options and better system integration.
Top Screen Recording Tools for Linux
1. OBS Studio (Open Broadcaster Software)
OBS Studio stands as the gold standard for screen recording and live streaming across all platforms, including Linux. This professional-grade software offers extensive features for both beginners and advanced users.
Installing OBS Studio
Ubuntu/Debian:
```bash
sudo apt update
sudo apt install obs-studio
```
Fedora:
```bash
sudo dnf install obs-studio
```
Arch Linux:
```bash
sudo pacman -S obs-studio
```
Flatpak (Universal):
```bash
flatpak install flathub com.obsproject.Studio
```
Basic OBS Studio Setup for Screen Recording
1. Launch OBS Studio from your applications menu
2. Add a Source:
- Click the "+" button in the Sources panel
- Select "Screen Capture (XSHM)" for X11 or "Screen Capture (PipeWire)" for Wayland
- Name your source and click "OK"
- Choose your display if you have multiple monitors
3. Configure Recording Settings:
- Go to File > Settings > Output
- Set Output Mode to "Simple"
- Choose recording quality (High Quality, Medium, etc.)
- Select your preferred recording format (MP4 recommended)
4. Audio Configuration:
- In Settings > Audio, configure your desktop audio and microphone
- Ensure "Desktop Audio" is set to your system's audio output
- Set "Mic/Auxiliary Audio" to your microphone if needed
5. Start Recording:
- Click "Start Recording" in the main interface
- Use the hotkey (default: Ctrl+Shift+R) to start/stop recording
Advanced OBS Features
Scene Collections: Create multiple recording setups for different purposes (gaming, tutorials, presentations).
Filters: Apply real-time effects like noise suppression, color correction, and chroma key.
Custom Hotkeys: Set up keyboard shortcuts for various recording functions.
2. SimpleScreenRecorder
SimpleScreenRecorder lives up to its name by providing an intuitive interface while maintaining powerful recording capabilities. It's particularly popular among Linux users who want reliable screen recording without complex configuration.
Installing SimpleScreenRecorder
Ubuntu/Debian:
```bash
sudo apt update
sudo apt install simplescreenrecorder
```
Fedora:
```bash
sudo dnf install simplescreenrecorder
```
Arch Linux:
```bash
sudo pacman -S simplescreenrecorder
```
Using SimpleScreenRecorder
1. Launch the Application:
- Open SimpleScreenRecorder from your applications menu
- The interface is divided into clear tabs for easy navigation
2. Input Tab Configuration:
- Select "Record the entire screen" or "Record a fixed rectangle"
- For partial recording, define your capture area
- Set your desired frame rate (30 FPS for tutorials, 60 FPS for gaming)
- Enable "Record cursor" if you want mouse pointer visibility
3. Output Tab Settings:
- Choose your output file location and name
- Select container format (MP4 is recommended for compatibility)
- Configure video codec (H.264 offers good quality-to-size ratio)
- Set audio codec (AAC for MP4 containers)
- Adjust quality settings based on your needs
4. Audio Configuration:
- Select audio backend (PulseAudio is standard for most distributions)
- Choose audio source (desktop audio, microphone, or both)
- Test audio levels using the preview function
5. Recording Process:
- Click "Continue" to proceed to the recording tab
- Click "Start Recording" when ready
- Use the system notification area to control recording
SimpleScreenRecorder Pro Tips
- Performance Optimization: Lower frame rates and resolution for longer recordings to save disk space
- Audio Sync: Use the audio delay feature if you experience sync issues
- Hotkeys: Enable global hotkeys for convenient recording control
3. Kazam
Kazam offers a minimalist approach to screen recording, making it ideal for users who need quick, straightforward screen capture functionality.
Installing Kazam
Ubuntu/Debian:
```bash
sudo apt update
sudo apt install kazam
```
Fedora:
```bash
sudo dnf install kazam
```
Using Kazam
1. Launch Kazam from your applications menu
2. Select Recording Type:
- Fullscreen: Captures entire desktop
- Window: Records specific application window
- Area: Custom rectangular selection
3. Configure Settings:
- Click the menu button for preferences
- Set output directory and file format
- Configure audio sources (speakers, microphone)
- Adjust recording frame rate
4. Start Recording:
- Click "Capture" button
- For area selection, drag to define recording region
- Recording begins after a countdown
5. Control Recording:
- Use system tray icon to pause/stop
- Keyboard shortcuts available for recording control
4. Command-Line Recording with FFmpeg
For advanced users and automation purposes, FFmpeg provides powerful command-line screen recording capabilities.
Installing FFmpeg
Ubuntu/Debian:
```bash
sudo apt update
sudo apt install ffmpeg
```
Fedora:
```bash
sudo dnf install ffmpeg
```
Basic FFmpeg Screen Recording Commands
Full Screen Recording (X11):
```bash
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -c:v libx264 -preset fast -crf 23 output.mp4
```
Record Specific Area:
```bash
ffmpeg -f x11grab -s 800x600 -i :0.0+100,200 -c:v libx264 -preset fast -crf 23 output.mp4
```
Include Audio:
```bash
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f pulse -i default -c:v libx264 -c:a aac -preset fast -crf 23 output.mp4
```
Record with Webcam Overlay:
```bash
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f v4l2 -s 320x240 -i /dev/video0 -f pulse -i default -filter_complex "[0:v][1:v]overlay=W-w-10:10[out]" -map "[out]" -map 2:a -c:v libx264 -c:a aac -preset fast -crf 23 output.mp4
```
Advanced FFmpeg Parameters
- -crf 23: Constant Rate Factor for quality (lower = better quality)
- -preset fast: Encoding speed vs compression efficiency
- -r 30: Set frame rate to 30 FPS
- -t 60: Record for 60 seconds only
5. GNOME Built-in Screen Recorder
GNOME desktop environment includes a basic screen recording feature accessible through keyboard shortcuts.
Using GNOME Screen Recorder
1. Start Recording: Press Ctrl+Alt+Shift+R
2. Recording Indicator: Red dot appears in top panel
3. Stop Recording: Press Ctrl+Alt+Shift+R again
4. File Location: Recordings save to ~/Videos directory
Limitations:
- Maximum 30-second recording length by default
- No audio recording
- Limited configuration options
Extending GNOME Recording Time
Edit GNOME settings to increase recording duration:
```bash
gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length 300
```
Choosing the Right Tool for Your Needs
For Beginners: SimpleScreenRecorder or Kazam
- User-friendly interfaces
- Quick setup and recording
- Good for basic tutorials and demonstrations
For Content Creators: OBS Studio
- Professional features
- Advanced audio/video controls
- Live streaming capabilities
- Plugin ecosystem
For Developers: FFmpeg
- Scriptable and automatable
- Precise control over encoding parameters
- Integration with other tools and workflows
- Minimal resource overhead
For Quick Captures: GNOME Built-in
- No installation required
- Instant access via hotkeys
- Suitable for short demonstrations
Optimizing Recording Quality and Performance
Video Quality Settings
Resolution: Match your display resolution for crisp output, or reduce for smaller file sizes:
- 1080p (1920x1080): Standard for most content
- 720p (1280x720): Good balance of quality and file size
- 4K (3840x2160): For high-resolution displays
Frame Rate: Choose based on content type:
- 24-30 FPS: Tutorials and presentations
- 60 FPS: Gaming and smooth motion content
- Higher rates: Specialized technical demonstrations
Bitrate and Compression:
- Higher bitrates: Better quality, larger files
- Hardware encoding: Reduces CPU usage (if supported)
- Variable bitrate: Optimizes file size while maintaining quality
Audio Configuration
Sample Rate: Use 44.1 kHz or 48 kHz for high-quality audio
Audio Sources: Configure desktop audio and microphone levels
Noise Reduction: Apply filters to minimize background noise
System Performance Optimization
Close Unnecessary Applications: Free up CPU and RAM resources
Use SSD Storage: Faster write speeds prevent dropped frames
Monitor System Resources: Watch CPU, RAM, and disk usage during recording
Graphics Drivers: Ensure updated drivers for optimal performance
Wayland vs X11 Considerations
X11 Environment
Most screen recording tools work seamlessly with X11, offering full functionality and compatibility.
Wayland Environment
Wayland's security model requires different approaches:
OBS Studio: Use "Screen Capture (PipeWire)" source
SimpleScreenRecorder: May require XWayland fallback
FFmpeg: Needs PipeWire integration for Wayland support
Enabling PipeWire Screen Sharing:
```bash
Install required packages (Ubuntu/Debian)
sudo apt install pipewire pipewire-media-session xdg-desktop-portal-gtk
Start services
systemctl --user enable pipewire
systemctl --user start pipewire
```
Troubleshooting Common Issues
Audio Problems
No Desktop Audio:
- Verify PulseAudio/PipeWire is running
- Check audio source selection in recording software
- Test with `pactl list sources` to identify available audio sources
Audio Sync Issues:
- Add audio delay in recording software settings
- Use constant frame rate to improve sync
- Check system audio latency settings
Microphone Not Working:
```bash
Test microphone
arecord -l
arecord -d 5 test.wav
aplay test.wav
Fix permissions
sudo usermod -a -G audio $USER
```
Video Issues
Poor Quality/Pixelated Output:
- Increase bitrate or reduce compression
- Check recording resolution matches display
- Verify graphics driver installation
Dropped Frames:
- Reduce recording resolution or frame rate
- Close resource-intensive applications
- Monitor system performance during recording
Black Screen in Recordings:
- Update graphics drivers
- Try different recording methods (X11 vs Wayland)
- Check compositor compatibility
System Performance Issues
High CPU Usage:
- Use hardware encoding if available
- Reduce recording quality settings
- Close unnecessary background processes
Storage Space:
- Monitor available disk space
- Use efficient codecs (H.264, H.265)
- Implement automatic file cleanup
Permission and Access Issues
Screen Capture Blocked:
```bash
Grant screen recording permissions
xhost +local:
For Flatpak applications
flatpak permission-set com.obsproject.Studio desktop used
Wayland screen sharing
Grant permission when prompted by desktop portal
```
Advanced Recording Techniques
Multi-Monitor Setup
OBS Studio Multi-Display:
1. Create separate scenes for each monitor
2. Add "Display Capture" sources for individual screens
3. Use scene transitions for dynamic multi-screen content
FFmpeg Multi-Monitor:
```bash
Record specific display
ffmpeg -f x11grab -s 1920x1080 -i :0.1 output.mp4
Combine multiple displays
ffmpeg -f x11grab -s 3840x1080 -i :0.0 output.mp4
```
Webcam Integration
Picture-in-Picture Setup:
1. Add video capture device source in OBS
2. Resize and position webcam feed
3. Apply filters for enhanced appearance
Chroma Key (Green Screen):
1. Set up green screen background
2. Add "Chroma Key" filter to webcam source
3. Adjust color tolerance and similarity
Scheduled and Automated Recording
FFmpeg with Timer:
```bash
Record for specific duration
ffmpeg -f x11grab -t 3600 -s 1920x1080 -i :0.0 output.mp4
Scheduled recording with cron
echo "0 9 1-5 /usr/bin/ffmpeg -f x11grab -t 1800 -s 1920x1080 -i :0.0 /home/user/recordings/meeting-$(date +\%Y\%m\%d).mp4" | crontab -
```
Scripted Recording Control:
```bash
#!/bin/bash
recording-script.sh
RECORDING_DIR="$HOME/recordings"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_FILE="$RECORDING_DIR/recording_$TIMESTAMP.mp4"
mkdir -p "$RECORDING_DIR"
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f pulse -i default -c:v libx264 -c:a aac -preset fast -crf 23 "$OUTPUT_FILE"
```
Live Streaming Integration
OBS Studio Streaming:
1. Configure stream settings for your platform
2. Set up scenes optimized for streaming
3. Test stream quality before going live
4. Use local recording as backup
FFmpeg Direct Streaming:
```bash
Stream to YouTube
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f pulse -i default -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -c:a aac -b:a 128k -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY
```
Post-Recording Processing
Video Editing Options
Kdenlive: Full-featured video editor with professional capabilities
OpenShot: User-friendly editing interface for beginners
Blender: Advanced editing and effects for complex projects
FFmpeg: Command-line editing and conversion for automation
Basic FFmpeg Post-Processing
Trim Video:
```bash
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:05:00 -c copy output.mp4
```
Resize Video:
```bash
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
```
Convert Format:
```bash
ffmpeg -i input.mp4 -c:v libx265 -c:a copy output.mkv
```
Add Subtitles:
```bash
ffmpeg -i input.mp4 -vf subtitles=subtitles.srt output.mp4
```
Extract Audio:
```bash
ffmpeg -i input.mp4 -vn -acodec copy output.aac
```
Create GIF from Video:
```bash
ffmpeg -i input.mp4 -vf "fps=10,scale=640:-1:flags=lanczos" -c:v gif output.gif
```
Batch Processing Scripts
Batch Conversion Script:
```bash
#!/bin/bash
batch-convert.sh
for file in *.mp4; do
ffmpeg -i "$file" -c:v libx265 -crf 28 -c:a copy "converted_$file"
done
```
Auto-Upload Script:
```bash
#!/bin/bash
auto-upload.sh
RECORDING_DIR="$HOME/recordings"
UPLOAD_DIR="/path/to/upload"
inotifywait -m "$RECORDING_DIR" -e create -e moved_to |
while read dir action file; do
if [[ "$file" == *.mp4 ]]; then
sleep 5 # Wait for recording to complete
cp "$RECORDING_DIR/$file" "$UPLOAD_DIR/"
echo "Uploaded: $file"
fi
done
```
Security and Privacy Considerations
Screen Recording Permissions
Modern Linux distributions implement security measures that may affect screen recording:
Wayland Security Model:
- Applications must request screen sharing permissions
- User approval required through desktop portal
- Temporary permissions that may need renewal
Flatpak Sandboxing:
- Screen recording applications may need additional permissions
- Use `flatpak permission-set` to grant access
- Monitor permission requests in system notifications
Privacy Protection Tips
Sensitive Information:
- Review recordings before sharing
- Use area selection to avoid sensitive screen regions
- Implement automatic cleanup of temporary recordings
Notification Management:
```bash
Disable notifications during recording
gsettings set org.gnome.desktop.notifications show-banners false
Re-enable after recording
gsettings set org.gnome.desktop.notifications show-banners true
```
Performance Monitoring and Optimization
System Resource Monitoring
Real-time Monitoring:
```bash
Monitor CPU and memory usage
htop
Check disk I/O
iotop
Network usage for streaming
nethogs
```
Performance Benchmarking:
```bash
Test encoding performance
ffmpeg -f lavfi -i testsrc=duration=60:size=1920x1080:rate=30 -c:v libx264 -preset ultrafast test_output.mp4
Measure encoding time
time ffmpeg -i input.mp4 -c:v libx265 -preset medium output.mp4
```
Storage Management
Automatic Cleanup Script:
```bash
#!/bin/bash
cleanup-recordings.sh
RECORDINGS_DIR="$HOME/recordings"
DAYS_TO_KEEP=30
find "$RECORDINGS_DIR" -name "*.mp4" -type f -mtime +$DAYS_TO_KEEP -delete
find "$RECORDINGS_DIR" -name "*.mkv" -type f -mtime +$DAYS_TO_KEEP -delete
echo "Cleaned up recordings older than $DAYS_TO_KEEP days"
```
Storage Usage Monitoring:
```bash
Check recording directory size
du -sh ~/recordings
Monitor available space
df -h /home
Set up alerts for low disk space
echo 'df -h | awk '\''$5 > 90 {print $0}'\'' | mail -s "Disk Space Alert" user@example.com' >> ~/.bashrc
```
Best Practices and Professional Tips
Content Creation Best Practices
Pre-Recording Checklist:
1. Close unnecessary applications and notifications
2. Test audio levels and quality
3. Prepare your desktop environment (clean desktop, appropriate wallpaper)
4. Plan your content structure and key points
5. Test recording setup with a short sample
Recording Environment:
- Use consistent lighting for webcam recordings
- Minimize background noise
- Position microphone appropriately
- Ensure stable internet connection for streaming
Post-Production Workflow:
- Create standardized naming conventions
- Implement version control for project files
- Use templates for common recording setups
- Maintain backup copies of important recordings
Hardware Recommendations
CPU Considerations:
- Multi-core processors improve encoding performance
- Hardware encoding support (Intel Quick Sync, AMD VCE, NVENC)
- Consider CPU load when choosing recording settings
Storage Requirements:
- SSD for recording directory to prevent dropped frames
- Calculate storage needs: 1080p30 ≈ 3-8 GB/hour depending on quality
- Network-attached storage for archival purposes
Audio Equipment:
- USB microphones for better audio quality
- Audio interfaces for professional setups
- Monitor headphones for real-time audio monitoring
Integration with Development Workflows
Continuous Integration Recording
Automated Test Recording:
```bash
#!/bin/bash
ci-record-tests.sh
export DISPLAY=:99
Xvfb :99 -screen 0 1920x1080x24 &
XVFB_PID=$!
Start recording
ffmpeg -f x11grab -s 1920x1080 -i :99.0 -c:v libx264 -preset ultrafast test-recording.mp4 &
FFMPEG_PID=$!
Run tests
npm test
Stop recording
kill $FFMPEG_PID
kill $XVFB_PID
Upload recording if tests failed
if [ $? -ne 0 ]; then
upload-recording.sh test-recording.mp4
fi
```
Bug Report Integration:
```bash
#!/bin/bash
bug-report-record.sh
BUG_ID="$1"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_FILE="bug_${BUG_ID}_${TIMESTAMP}.mp4"
echo "Recording bug reproduction for ID: $BUG_ID"
ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f pulse -i default -c:v libx264 -c:a aac -preset fast -crf 23 "$OUTPUT_FILE"
Attach to bug tracking system
curl -X POST -F "file=@$OUTPUT_FILE" "https://bugtracker.example.com/api/bugs/$BUG_ID/attachments"
```
Conclusion
Screen recording in Linux offers incredible flexibility and power through various tools and approaches. From simple point-and-click solutions like Kazam and SimpleScreenRecorder to professional-grade software like OBS Studio and command-line automation with FFmpeg, Linux users have access to comprehensive screen recording capabilities that often surpass proprietary alternatives.
The key to successful screen recording lies in choosing the right tool for your specific needs, understanding your system's capabilities and limitations, and implementing proper optimization strategies. Whether you're creating educational content, documenting software behavior, producing gaming videos, or conducting professional presentations, the tools and techniques covered in this guide provide a solid foundation for high-quality screen recording on Linux systems.
Remember to regularly update your recording software, monitor system performance, and implement proper file management practices to ensure smooth and efficient recording workflows. As Linux desktop environments continue to evolve, particularly with the transition to Wayland, staying informed about compatibility changes and new features will help you maintain optimal recording capabilities.
The open-source nature of Linux screen recording tools means continuous improvement and community-driven development, ensuring that users always have access to cutting-edge features and reliable, cost-effective solutions for all their screen recording needs.