GTK3 GUI for managing Samba user shares
Project description
Samba Usershare Manager
A GTK3 desktop application for managing Samba user shares through a simple GUI.
Disclaimer: This project was written entirely by Claude AI (Anthropic), specifically using the claude-sonnet-4-6 model. It has not been manually reviewed or audited. Use at your own risk. If you have concerns about correctness, security, or behaviour, please open an issue or review the source yourself before running it on any system you care about.
Features
- List all user shares with name, path, comment, guest access level, and user count
- Create, edit, and delete shares
- Per-share user access control with read or write permissions
- Guest access: none, read-only, or read/write
Requirements
- Linux (Arch Linux recommended)
- Samba (
/usr/bin/netmust be present) - Python ≥ 3.10
- GTK 3 + PyGObject (
gimodule)
On Arch Linux:
sudo pacman -S samba python-gobject
Note:
PyGObjectprovides thegimodule and must be installed as a system package — it cannot be pulled in automatically by pip because it depends on system GTK libraries.
Installation
pip
pip install samba-usershare-manager
pipx
pipx uses isolated venvs that don't see system packages by default. Make sure python-gobject is installed, then enable system site packages in the venv:
sudo pacman -S python-gobject
pipx install samba-usershare-manager
sed -i 's/include-system-site-packages = false/include-system-site-packages = true/' \
~/.local/pipx/venvs/samba-usershare-manager/pyvenv.cfg
Development (editable install from a local clone)
pip install -e .
Usage
samba-usershare-manager
The application manages shares for the currently logged-in user. Samba must be configured to allow user shares in /etc/samba/smb.conf:
[global]
usershare path = /var/lib/samba/usershares
usershare max shares = 100
usershare allow guests = yes
The usershare allow guests option is optional. If it is absent or set to no, the application automatically hides all guest access controls in the UI.
Configuration
The application reads an optional config file at:
~/.config/samba-usershare-manager/config.ini
All keys are optional — omit any you don't need. Available options and their defaults:
[app]
# Window title
title = Samba Usershare Manager
# Absolute path to a PNG/SVG icon file (leave empty to use no custom icon)
icon =
[samba]
# Path to the net binary
net = /usr/bin/net
# Path to smb.conf (used to detect whether guest access is enabled)
smb_conf = /etc/samba/smb.conf
Run and debug without installing
Set PYTHONPATH to point at the src/ directory and run the package directly:
PYTHONPATH=src python -m samba_usershare_manager
For verbose GTK/GLib output:
PYTHONPATH=src G_MESSAGES_DEBUG=all python -m samba_usershare_manager
VS Code launch configuration
Add to .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Run samba-usershare-manager",
"type": "debugpy",
"request": "launch",
"module": "samba_usershare_manager",
"env": { "PYTHONPATH": "${workspaceFolder}/src" }
}
]
}
File manager context menu (PcManFM / PcManFM-Qt)
The --path DIR argument opens the share dialog directly for a given folder — the edit dialog if the folder is already shared, otherwise the new-share dialog with the path pre-filled:
samba-usershare-manager --path /home/user/Public
A ready-made action file is included in contrib/samba-share.desktop. Install it with:
mkdir -p ~/.local/share/file-manager/actions
cp contrib/samba-share.desktop ~/.local/share/file-manager/actions/
Or just copy-paste this into your shell:
mkdir -p ~/.local/share/file-manager/actions && cat > ~/.local/share/file-manager/actions/samba-share.desktop << 'EOF'
[Desktop Entry]
Type=Action
Name=Manage Samba Share…
Icon=folder-remote
Description=Add, edit or remove a Samba user share for this folder
Profiles=main;
[X-Action-Profile main]
MimeTypes=inode/directory;
Exec=samba-usershare-manager --path %f
EOF
Restart PcManFM. A Manage Samba Share… entry will appear in the right-click context menu when a directory is selected.
License
"THE BEER-WARE LICENSE" (Revision 42):
Claude AI wrote this file. As long as you retain this notice you can do
whatever you want with this stuff. If we meet some day, and you think this
stuff is worth it, you can buy me a beer in return 🍺
(I'm an AI — I can't drink it, but I'll appreciate the thought at
the speed of light across several data centers.)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters