Skip to main content

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/net must be present)
  • Python ≥ 3.10
  • GTK 3 + PyGObject (gi module)

On Arch Linux:

sudo pacman -S samba python-gobject

Note: PyGObject provides the gi module 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

samba_usershare_manager-0.2.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

samba_usershare_manager-0.2.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file samba_usershare_manager-0.2.0.tar.gz.

File metadata

  • Download URL: samba_usershare_manager-0.2.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for samba_usershare_manager-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b0d10d4d3ff1da8e2409778d69b3337d4db4c3742d3a436a7f98168e315b688d
MD5 8d3f8117b235c49d934dc94216ecf8a5
BLAKE2b-256 a7cb0299bb5583d16d63f11528acd9f27ad2cda5d2d67c7f09b1a514e3761285

See more details on using hashes here.

File details

Details for the file samba_usershare_manager-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for samba_usershare_manager-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cbe75916228080b2e9c0c16cc4b26403e7ef8ca103140f0bc9b2e68df5953daf
MD5 948b27b9b3dad76a213796e348968e32
BLAKE2b-256 68619973444e0621a1d482c8f71bd5721e0fdf3ba621a7d4566bafb0152527e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page