The Linux mount utility does not allow for a user to mount a samba share on Arch based systems.
This script relies on the packages
gvfs-smb which will pull the necessary
smb-client dependency. The following command will do the trick. If you want the dependencies to be explicitly installed add
smbclient to the command. The
--needed argument will skip syncing packages already present.
sudo pacman -Syu gvfs-smb --needed
Create a new script in
~/.local/bin and name it
mkdir -p ~/.local/bin touch ~/.local/bin/gio-mount-myshare.sh
Paste below content and modify the variables to use your samba server and share name.
The symlinks folder defaults to
~/SMBLinks and this can of course be changed as you see fit.
Running the script will attempt mounting the share. If credentials are needed you will be challenged. Enter the correct credentials to continue. To unmount a mounted share run with
#! /bin/bash # # Script for mounting and unmounting a configured samba share # Depends on `smbclient` and `gvfs-smb` # Customize the variables as needed # - Symlinks are located in designated folder (default: $HOME/SMBLinks) # - Symlink can be named (default: $SHARENAME) # - Using `-u` argument will unmount and remove the symlink # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # # @linux-aarhus - root.nix.dk # # MODIFY THESE VARIABLES # your samba server's hostname or IP address HOST="my-server" # the share name on the server SHARENAME="my-share" # symlink name LINKNAME="$SHARENAME" # symlink is placed in this folder SYMLINKS="$HOME/SMBLinks" # /END MODIFY SCRIPTNAME=$(basename "$0") VERSION="0.2" # check argument $1 if [[ "$1" == "-u" ]]; then # remove symlink rm -f "$SYMLINKS/$LINKNAME" # unmount share gio mount -u "smb://$HOST/$SHARENAME" exit elif [[ $1 != "" ]]; then echo ":: $SCRIPTNAME v$VERSION" echo "==> invalid argument: $1" echo "Usage: " echo " mount SMB : $SCRIPTNAME" echo " umount SMB: $SCRIPTNAME -u" exit 1 fi # mount command gio mount "smb://$HOST/$SHARENAME" # easy reference to gio mount point ENDPOINT=/run/user/$UID/gvfs/''smb-share:server=$HOST,share=$SHARENAME'' # create the subfolder if ! [ -d "$SYMLINKS" ]; then mkdir -p "$SYMLINKS" fi # use --force argument to suppress warning if link exist ln -sf "$ENDPOINT" "$SYMLINKS/$LINKNAME"
The script can be utilized in a systemd user service
[Unit] Description=GIO mount smb share-name [Service] Type=oneshot ExecStart=/home/%u/.config/systemd/user/gio-mount-share.sh ExecStop=/home/%u/.config/systemd/user/gio-mount-share.sh -u RemainAfterExit=true [Install] WantedBy=multi-user.target
Also posted at: