Mount samba shares with utf8 encoding using cifs

Introduction
I was having the most difficult time in the world trying to figure out the best way to connect from my ubuntu workstation to a server hosting shares which were created on a windows 2000 server.

Nautilus mounted them fine, and displayed the correct folder and file names. However, the files were not cashed which meant that I was getting very slow response times, and applications which were Nautilus unaware (Open office) could not access the shares. I was also having difficulty with my keyring among a few other share related issues.

I tried using the smbfs mount function, but it didn't want to cooperate with the Japanese file names. So, since cifs is suppose to be poised for a smbfs replacement I decided to take a look into it and see what it could do. So, even if you don't have Japanese (or other non-latin based characters) in your shared folder/file names, you should still take a look at cifs.

Disclaimer:
==================================
Despite the fact that this is a CLI tutorial, I have tried to write at a fairly basic level. Therefore, I've included a lot of commentary to address the needs of a newly established Linux/Ubuntu user which makes this howto seem lengthy (it's really only a couple lines of cli edits). So, if there is confusion, please let me know so I can attempt to clear it up.

Also, I have focused on command line instruction so the methods can be used in any of the Ubuntu based releases (Ubuntu, Kubuntu, Xubuntu et. al.)

Some NAS devices (like the ARGOSY HD363N) have difficulty handling cifs, so if you are trying to connect to a network attached storage unit, you may be stuck with smbfs (see disclaimer below). If you do have a NAS device, besure to include the device name and model in your post if you are having trouble.

SMBFS has depreciated is no longer included in Ubuntu. If your network needs require smbfs, you will have to compile it from source, or use a version of Ubuntu earlier than Hardy (not recommended).

There are a few preliminary actions we need to take before we can start mounting using cifs.

Although smbfs is no longer part of Ubuntu, smbfs is still the metapackage which contains all the dependencies necessary for using cifs to mount Samba shares. Ubuntu does allow for some cifs functionality out of the box, so it may seem like this command is not necessary, but the smbfs metapackage is critical for this howto. Even if you are positive you DO have the smbfs metapackage installed, run this command anyway.

Code:

sudo apt-get install smbfs

Now we need to create a location where the samba share can mount. Change "sharename" in the following code to something unique to the remote share, and that you will recognize (usually the share name itself). By creating the mount point in the /media folder, you will get a nifty icon to appear on your desktop like when a cdrom mounts.

Code:

sudo mkdir /media/sharename

To mount a windows share on a DHCP network, it is convenient to be able to mount by netbios name, so you don't have to modify the mount parameters every time you reboot your network. This can be easily enabled by doing the following:

Edit your nsswitch file

Code:

sudo nano /etc/nsswitch.conf

search through the file and look for the line that looks something like so:

Code:

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

and add "wins" to the line so it looks something like this:

Code:

hosts: files mdns4_minimal [NOTFOUND=return] wins dns mdns4

Save the file by hitting ctrl+x, type "y" to save the buffer, and <enter> to exit.note: Order does matter. "wins" MUST be before "dns".

Now you'll need to install winbind

Code:

sudo apt-get install winbind

Reboot, or restart your network.

Before you move on, you'll need to know the netbios name and share name of the computer you are trying to connect to. If you don't know what they are, please see the next post in this thread before continuing

----------------------------------------------------

There are two ways you can mount using cifs; you can mount it manually as a one time use type purpose, or you can mount it permanently. If you only want to mount the share a few times, it's probably best to follow the directions under "Manual mount". If you will be mounting the same share over and over again, follow the directions under "Permanent mount".

In all cases, you will have to replace the following words:
> netbiosname
> sharename

with the actual netbios name and shared folder name of the shares on your remote computer.

Manual mount

If all you want to do is mount the samba share a few times, it's probably not necessary to make modifications to fstab as is the case with a permanent arrangement. Just modify one of the following lines so that it reflects your local needs (ie, change "netbiosname" to the netbios name of the samba server you are attempting to connect to, change "sharename" to the network name of your share, and change 'winusername' and 'winpassword' to the appropriate username and password of the share you are attempting to connect to).

If you connect to the same samba share day in and day out, you'll likely want to mount it with a more permanent arrangement so you don't have to go looking for your mount command every time you boot your computer. To do this, you'll need to modify your fstab file. This is a system critical file (your Ubuntu box will not work correctly if it has a mistake), so you'll want to make a backup in case things go haywire on you:

Code:

sudo cp /etc/fstab /etc/fstab_old

if you need to restore your backup, use the following command:

Code:

sudo mv /etc/fstab_old /etc/fstab

If your samba server requires a password to access the shared files, you should create a credentials file so the username and password are hidden from prying eyes. If you don't have password protected access to your samba share, skip this section and start with the line that says "Now we edit fstab:".

To create a credentials file, do the following:

Code:

sudo nano /root/.smbcredentials

WARNING!!! Do not use a GUI text editor (like KATE) to create this file!!!

Add the following lines (change winusername and winpassword to the correct username and password for the samba/windows server you want to connect to):

username=winusername
password=winpassword

Save the file by hitting ctrl+x, type "y" to save the buffer, and <enter> to exit.

Now, change the permissions of the file so only root can read and edit it:

Code:

sudo chmod 700 /root/.smbcredentials

Now we edit fstab:

Code:

sudo nano /etc/fstab

and at the end of the file, insert one (1) of the following 3 lines according to your needs. Make sure you change "netbiosname" and "sharename" to the correct names for the server you are trying to connect to. (if you don't know what these are, please see the next post)

Save the file by hitting ctrl+x, type "y" to save the buffer, and <enter> to exit.note: if you've used a text editor other than nano, make sure that there is a blank line at the end of this file.

Finally, test your settings to make sure they work:

Code:

sudo mount -a

If you get a folder on your desktop with your server shares, then you have configured everything correctly. If not, please see the "Troubleshooting" section below, review the howto, or post in the thread.

Now, your samba shares will be mounted every time you start the computer. If you are not connected to your network when you boot, this will not cause problems. The share will simply not appear on your desktop.

Thanks to jwrede for providing the solution to this troublesome problem.

---------####---------

Gedit save errors.
A bug (described here) in gedit prevents gedit from saving to files located on CIFS mounted shares. Thank you MountainX for reporting this very helpful information. A workaround for this error was located here. The link is no longer valid, but the described workaround was to uncheck "Create backup of files before saving" (under "Edit" > "Preferences" > "Editor"). Also, a patch was recently posted so current versions of Gedit may not be effected.

Also, you will not be able to connect to any UAC protected drive/directory. Because of this, sharing the entire drives will not give you access (unlike it did in XP). Believe me when I say ... this is a very good thing. You don't want your entire system hanging out there for all to see. It's possible to override this protection but I wouldn't advise it.

Files owned by root / "The folder contents could not be displayed". If you can view but not change, delete, or add new files to your Samba share, or if you get an error in Nautilus which says, "The folder contents could not be displayed" or more recently "You don't have permission to do that"; try this fix:

1) Find your uid and gid (normally both are 1000, but double check):

Code:

cat /etc/passwd | grep ubuntu-username

The output will look something like this (my uid and gid are marked in red):

KARMIC: Files owned by root / "The folder contents could not be displayed"
Note for KARMIC users encountering this error:
There is a bug affecting some users (particularly those with NAS devices like the Timecapsule) which gives the same symptoms as this problem. Bug report is here: https://bugs.launchpad.net/ubuntu/+s...ux/+bug/406466

Fix is simple, just add the "noserverino" option to the mount command like so:

Thanks to HyugaRicdeau for discovering the fix for that troublesome problem.

---------####---------

No international characters in your share? You can also use this howto for normal samba shares (without utf8 encoding). If the share does not have utf8 encoding, the iocharset option is simply ignored.

Re: Mount samba shares with utf8 encoding using cifs

Thanks for the guide. I'm looking forward to learning that fstab stuff when I FINALLY get this thing workin'

I'm somewhat of a newb, so please excuse me if i've posted this in the wrong place, or feel free to 'bump' it to the right place.

I'm having some trouble understanding the difference between cifs/nfs/samba/smbfs. Samba to me seems like the linux protocol to talk to windows machines and smbfs/nfs/cifs are a means of doing that, is this correct?

I'm trying to use amarok to play files off a NAS (namely a DS-101j). After a month or so of stuffing around I think my best shot is cifs, I get that impression from this article:http://amarok.kde.org/wiki/Samba (down the bottom).

So I think i'm in the right place! Also having a read off the amarok forums from people with similar setups, some seem to have better success off cifs than smbfs.

The files appear in the folder. But if I try and copy large amounts/do an amarok collection scan it invariably crashes and the folder no longer appears as a mount, it feels like the whole mount system has just fallen over, this form of mount seems very ineffecient. The inbuilt nautilus 'connect to server' system seems quite a bit more effective but I still feel like I could get better performance...? As i'm sure your aware a lot of programs can't access the mount through the nautilus interface.

Having read a few of the bug reports for amarok some people claim they scan much larger collections using different hardware so I'm not sure what i'm doing wrong. I really have no idea what else I can try. I've also tried quite a few different GUI network mounting managers and the performance was still lacklustre/useless.

/On a side note, I gather the utf8 thing means it can read weird characters and stuff (hence the japanese fix). But what do -t/-o switches mean? And the "file_mode=0777,dir_mode=0777".

On a previous install of ubuntu I swear when I mounted things in the command prompt they would appear as desktop icons if successful, this doesn't seem to happen anymore and idea why?

Re: Mount samba shares with utf8 encoding using cifs

first of all, to answer your general questions:
yes, you are exactly correct, samba is the highway, and cifs/smbfs is the vehicle.

nfs is a linux specific protocol used for the same purpose. windows can't use it (that i'm aware of). but if your trying to talk from a linux machine to a linux file server, then nfs is the way to go.

nfs and samba are simply two different ways of transferring files across a network. there are many others ... scp, ftp ... all with varying positive and negative aspects.

to address your problem, did you install smbfs?

Code:

sudo aptitude install smbfs

if so, try this as well:

Code:

sudo aptitude install samba

and then give that line another try. it should work.

you don't get any errors or anything do you?

also, icons appear on the desktop if you mount in the /media folder, i don't think they will appear on the desktop if you mount from the /mnt folder. i really don't know about that for sure though ... i DO know that you WILL get a link on the desktop if you mount in the /media folder.

Re: Mount samba shares with utf8 encoding using cifs

dmizer,

Thanks for your reply. It's amazing how much (and random reading) i've done on such simple answers. I really do appreciate you answering ALL my questions. I'm having a very painful (and somewhat masochistically enoyable!) conversion to ubuntu. Anyway, sadly i had already installed the samba and smbfs... Just to confirm I tried it anyway:

To answer your question;
No, I do not get any errors on the aforementioned mount methods.
(What's the markup for 'quote' can't find it.)
A few days ago I was but that was because I hadn't installed samba!

One thing I noticed on reading the other ubuntu forum threads is that some people seemed to think different versions of samba could cause issue with cifs, could this be my problem?

What are the differences between smbfs and cifs? What protocol/pathway does nautilus mount stuff with?

So am I to understand you think my file server Synology DS-101j is linux based? (And hence, should be interfaced with using 'nfs') I've always thought it was linux based but never been sure. Assuming this is the case, how do I mount something using nfs rather than samba?

Do I have to that stuff:
"sudo apt-get install portmap nfs-common"
and
"sudo mount server.mydomain.com:/files /files"
-The trouble with above line is I don't think ubuntu will be able to resolve the dns name of my NAS...? Will it? What was that WINS stuff actually for in your howto? So if you do mount with out any switches does it assume to use 'nfs'?

according to your hardware specs, you're not going to be able to use nfs. but cifs is supported, so there shouldn't be a problem with that. but i assume you have this connected and transferring files with no problems to a windows client? if so, did you have to install software or drivers to make it work?

i don't know of any problems with the current version of cifs working with window servers (it's important to note here that windows does not use samba, linux uses samba to emulate windows file sharing). there are sometimes problems when connecting to older linx samba servers with cifs, but if you have dapper, you'll not have this issue.

how about firewall protection. you must have a router in place, so it's something worth checking.

really, i'm grasping at straws here because i've never worked with nas units except for in windows clients, but from what i have experienced, you should be connecting with no problems.

differences between samba and nfs is that nfs is built on an open sourced file sharing structure. so it works fast on linux with very little configuration. samba on the other hand is a linux version of window's proprietary netbios file sharing. as such, it's a backwards engineered system that works tolerably only because people have been hacking at it for so long.

since nfs is a completely different functionality for mounting shared files, the command in fstab and in the cli is completely different. so no, if you just use "mount" it does not assume nfs.

the wins stuff at the beginning is designed to allow your ubuntu computer to resolve netbios names, so you will be able to mount your nas by name rather than ip.

do me a favor and post the output of

Code:

smbtree

i think you will be able to get more specific answers to many of your questions by using the man command. for example:

Code:

man mount.cifs
man mount

it'll give you a better idea of what opitons are available to you for mounting your share.