How to share files through the local network?

  • I have a desktop (Ubuntu 13.04 & Win 7 Home Premium) and a Laptop (Ubuntu 12.04), both having WiFi adapters. I also have a WiFi router connected to internet which both my computers can access.

    I want to share files between my desktop and my laptop using WiFi (similar to Homegroup on Windows 7 but without using Ethernet cables). How do I set-up that?

    I want to share files using both OSs, if anyone have have information about sharing files with any of the OS please answer!

    This is not a duplicate, as it asks about file sharing between Ubuntu and Windows as well as Ubuntu and Ubuntu machines. Note the desktop has both Ubuntu and Windows. When it is booted to Ubuntu and the laptop has Ubuntu, you have Ubuntu to Ubuntu file sharing.

  • user68186

    user68186 Correct answer

    7 years ago

    Network Setup

    Connect both the desktop and laptop to the WiFi router using standard setup. To check that both computers are connected, test that you can get on the Internet from both computers.

    Optional: In the router setup, see the local IP addresses assigned to the desktop and the laptop. These may look like 192.168.0.100 or 192.168.1.199. If an option to assign these specific IP addresses permanently in the router exist, you can do that.


    Windows → Ubuntu

    Step 1 On the laptop create a folder you want to share. There may be a folder called "Public" choose that one if you want. Right click the folder icon and choose "Sharing Options." A new window will open up:

    enter image description here

    Check the box "Share this folder."

    You may also want to check the other two boxes "Allow others to create and delete files in this folder." This will allow you the desktop Windows user to create and delete files on this folder.

    The "Guest Access" check box is self explanatory. This may be useful if your Windows userID is not exactly the same as your Ubuntu user ID.

    It may tell you Sharing service is not installed:

    enter image description here

    Click "Install Service" and let it install the software by providing the password for the laptop user account when it prompts. You may be prompted to install more software like libpam-smbpass. Install all the software. It will ask you to restart services and click Yes.

    Step 2. Open the property window of the "Public" folder, by right clicking on it. Go to the permissions tab and make sure it looks like this:

    enter image description here

    Click on "Change permissions of enclosed files" button and make sure it looks like this:

    enter image description here

    Now you should be able to edit files created in ubuntu in the "Public" folder of the laptop in the Windows Explorer.

    However, if you create a file in Windows and put it in the Public folder of the laptop you may not be able to open that file when you get to the laptop. This is because Windows and Ubuntu do not understand each other's file ownership and permissions. So in the Ubuntu laptop, the file created by Windows is owned by "Nobody". You will have to open Nautilus as an Administrator and change the ownership and read-write permissions while in the laptop.

    Step 3. Go to the Windows on the desktop computer and open Windows Explorer, Click on the triangle next to Network on the left panel. From the drop-down list you should be able to select the name of the laptop computer running Ubuntu.

    Now you should be able to see your shared folder (say "Public") from the laptop in the Windows Explorer. Click on "Public" folder and see the files in the folder. You should be able to copy files from the Public folder in Ubuntu to your Windows local folder.

    Here is a step by step guide with some more details.


    Ubuntu → Windows

    Step 1 Setup Windows folder sharing using methods available for Windows. follow the steps in the link above for the Windows part.

    Step 2 Open a terminal in the Ubuntu laptop by pressing Ctrl+Alt+T and enter:

    sudo -H gedit /etc/samba/smb.conf
    

    and look for the line:

    ;   name resolve order = lmhosts host wins bcast
    

    and edit it to look like this

       name resolve order = bcast lmhosts host wins 
    

    Note, there is no ; in the beginning of the edited line. Save the file and exit gedit. Enter the following two lines (one at a time) to stop and start samba:

    sudo stop smbd
    sudo start smbd
    

    Step 3 On the laptop, open Nautilus, the file browser and click on Network on the left panel. Click on "Browse Network" Click through the icons in the main Network window of Nautilus and find your Windows Desktop and shared folder. Verify you can copy files from and to this folder.

    See "Failed to retrieve share list from server" error when browsing a share with Nautilus for reference on editing the smb.conf.


    Ubuntu → Ubuntu

    Boot the desktop to Ubuntu.

    On both the desktop and the laptop do the following to make sure ssh-server is intalled:

    Open a terminal by pressing Ctrl+Alt+T and enter

    sudo apt-get install openssh-server
    

    Enter your password when prompted. The cursor will not move when you enter the password. This is normal.

    This will install the ssh-server if it is not already installed. If already installed, it will do nothing.

    The Desktop First:

    Open Nautilus and find the Menu item "Other Locations". At the bottom find Connect to Server:

    sftp connection[7]

    Under Server Address Enter:

    sftp://[email protected]_name.local/home/laptop_user_id
    

    where laptop_user_id is the user ID you created for on your laptop. You can find your user ID by typing whoami in a terminal. And laptop_name is the name you gave to the laptop when you installed Ubuntu.

    If you want to share a partition in your second hard drive of the desktop, under Server Address Enter:

    sftp://[email protected]_name.local/path/to/the/mount/point/of/the/partition/in/second/hard/drive
    

    Replace path/to/.../drive with the actual path.

    Alternately, if you know the local IP address of your laptop you can replace laptop_name.local with the local IP address of the laptop.

    Press Connect. You will see a password dialog box:

    Password for SSH

    Enter the password associated with laptop_user_id and select if you want the password is to be remembered or not. Again click Connect.

    Now you should see your home folder of the laptop.

    Notice there is a new entry under Network on the left panel of Nautilus that begins with laptop_user_id. Right click on it and choose "Add Bookmark" to create a permanent bookmark for your laptop's home folder in the Nautilus of the Desktop.

    See this page for pictures from an older version.

    Now the laptop

    Follow the same process as the desktop above.

    I'll try Ur method and will reply U, till then Thank U very much for answer! -to user68186

    I'm trying **Ubuntu to Ubuntu** I installed SSH from terminal and when I click connect to server I get a window 'Server Address' where they given example enter address as smb://foo.example.org, Where I can select SSH from any drop down menu?

    Above process for Ubuntu to Ubuntu is done successfully from my laptop but my desktop says Don't have permission to access the requested location. What I should do?

    :) Done, I installed **SSH** in my laptop as U said and my work done, now I can see My laptop in my Desktop and my Desktop in my Laptop, Thanks alot and Thank U very much for time U spent for this question.

    You are welcome. I will edit my answer to add the final piece of the puzzle and delete my comments.

    Ok, till then I'll try with Windows to Ubuntu.

    **Samba** installed from Terminal even showing as installed in Software Center but No such application showing in Dash, what I should do?

    @Gaurav Samba is a service that runs in the background. There is no graphical user interface by that name. That's why you won't find it in Dash. In which step are you getting stuck? Can you see the shared folder in Windows from Ubuntu? Can you see the shared folder in Ubuntu from Windows?

    I used step by step guide as U mentioned and in one step from there I'm stuck that is Launching **Samba**? How I can setup Sharing in Windows? I never used it? Can U tell me Please?

    Just to clarify, can you see the Windows folder from Ubuntu? Just follow the steps I have written above and tell me where you get stuck. Forget the link as you are using 13.04, not 12.04 as described in the link.

    I tried my answer on two Windows and Ubuntu laptops and added more information in my answer. I could get Windows to see the "Public" folder in my home folder in the Ubuntu. However, I couldn't get the Ubuntu to see the Windows machine or it's folders yet. I have done this before with another version of Ubuntu and it worked then. I will update my answer again if I figure out how to make the Ubuntu computer see the Windows shared folder.

    I have edited my answer again. Added a new section on Ubuntu-Windows. let me know where you get stuck.

    I want to connect Windows (Desktop) to Ubuntu (Laptop) and I cant connect them and unable to see each other's files in both of devices, what should I do in **Windows**? I edited so called Public folder properties but still I cant see it in Networks, Which action I should take?

    @Gaurav Make sure the boxes "Allow others to create and delete files and folder" and "Guest Access (for people without user accounts)" are ticked and `libpam-smbpass` is installed. Restart the laptop if you have not done so (in case samba service was not started properly. You can also use the command `sudo start smbd` to start samba service.

    I'm unable to select the check box **Guest Access (for people without user accounts)** this option is disabled in my laptop, I'm confused with all process to do, I installed Samba on laptop, I created so called folder Public and edited its Sharing Optins and Properties too but how I can see it in My Windows (Desktop)? Can U mention how to connect Laptop to desktop, and to be clear whats the procedure in Windows (Desktop) which I have to do first before going to Laptop?

    Hi @Gaurav, I am sorry to hear that you are still having trouble with the Ubuntu folder sharing with Windows. I don't know why Guess Access is disabled in your laptop. I needed to tick this one, as my user ID in the Windows machine is different from that in the Ubuntu machine. I think once I enabled this option, the Ubuntu machine just appeared in the "Networks" folder in Windows. I didn't have to do anything in the Windows side.

    There is an User Account automatically created on my Laptop after installing samba called 'Samba guest account', I cant open it without password and when I used my account's password still it not get opened, is it anything helpful?

    I am not a samba expert. You may want to ask a separate question about configuring samba.

    I tried many times but I'm not able to connect Windows (Desktop) to Ubuntu (Laptop), Can anybody help me? @user68186 in the setp 2 of Windows-Ubuntu what should I select for Group? If I have to select my Homegroup from Windows then I cant see it there! Please help!

    @Gaurav do not need to change the **Group** in step 2. This is setting is for Ubuntu's internal use only and has no effect on Windows-Ubuntu connection. This setting should be the **same as your user-ID.** That is, if your user-ID is "gaurav" the group is also "gaurav".

    @user68186 when connecting two ubuntus to each other, is there a way to access mounted drives too?

    @user68186 got it XD the line `sftp://[email protected]_name.local/home/laptop_user_id` connects to the home folder because it has the path to the home folder in it. I could connect to the drive through `sftp://[email protected]_name.local/*path_to_drive*`

    @MinaMichael Thanks. I am glad you figured it out. I have now added an extra example in the answer to cover this situation.

    @user68186 is the user id same as the username?

    @In78 Yes, they are the same thing.

    I've been trying the Ubuntu to Ubuntu solution to connect to a mounted drive however it's not working. My mounted drive on my laptop is at /media/eamonn however on the desktop when I connect to server using sftp://[email protected]/media/eamonn it connects however it connects to my home folder which is not what I'm wanting. If I hover over the connection in Files it shows /home/eamonn which is where it's at. If I go back into connect to a server I can see clearly it says /media/eamonn. So not sure what's going on. Can anyone help?

    @EamonnDoyle Please ask an new question linking this one.

    Note for Ubuntu to Ubuntu the "Connect to Server" input box now appears at the bottom of the "Other Locations" page for more recent versions of (Nautilus) Files and is surprisingly easy to miss - https://askubuntu.com/a/851681

    @bonger Thanks! I have updated the text and picture to reflect the changes.

  • I am going to propose some alternatives that don't look exactly like SAMBA, but could be better for other use cases.

    HTTP server

    HTTP is the protocol used to access regular websites, so every OS was forced to implement it!

    Find your IP on the source computer, e.g. 192.168.0.10. On Ubuntu:

    ifconfig
    

    Create a server in a directory that contains the file you want to transfer:

    python -m SimpleHTTPServer 8080
    

    On the receiving computer, open a browser, and visit:

    192.168.0.10:8080
    

    Now you can navigate through directories to the file you want.

    I'm not sure if this method is fast / robust, but it is one of the simplest to setup and portable.

    Faster alternatives are discussed at: https://stackoverflow.com/questions/12905426/what-is-a-faster-alternative-to-pythons-simplehttpserver

    rsync

    Between two Ubuntu computers, this is a great option: https://en.wikipedia.org/wiki/Rsync

    First make sure you can SSH from one computer to the other:

    ssh [email protected]
    

    You can create a new account for the user if you want to keep your password private.

    You might need to run on server and client:

    sudo apt-get install ssh
    

    Then, once you managed to login, to copy files from the server to client just do:

    rsync -av [email protected]:/full/path/to/remote/directory .
    

    Multiple directories can be copied in one go as explained at https://unix.stackexchange.com/questions/308810/copying-multiple-files-using-rsync-over-ssh:

    rsync -av '[email protected]:/full/path/to/remote/directory "/full/path/to/remote/directory with space"' .
    

    This is the lowest common denominator method: most robust, efficient, widely Linux available and security relies on well known file permissions + user schemes.

    This might not be easy on Windows thought:

    NFS

    Again mostly for two Ubuntu machines, this is the SAMBA for Linux, with support built into the Linux kernel: https://en.wikipedia.org/wiki/Network_File_System

    Basically it allows you to mount a folder from the server on the guest.

    Setup and troubleshooting is potentially a bit harder than rsync, but definitely doable, this is a good article: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-16-04

    Maybe there is also some Windows implementation: https://docs.microsoft.com/en-us/windows-server/storage/nfs/nfs-overview but I'm guessing Microsoft must give better support to its own SMB protocol.

  • sudo apt-get install servefile
    

    servefile is perfect for casual sharing, it runs an http server on port 8080 (unless -p <port> is specified), so it can communicate fast with any device with a browser.

    Examples:

    • servefile filename # Just serves a file


      I get 3 URLs because I have 3 IP's from 3 different LANs, normally you would get just 1, but it's awesome it shows you that.

    • servefile -u ~/Pictures # Let's you upload files into Pictures folder

      upload files

    • servefile -l ~/Pictures # Serves the content of the folder

      content of the folder

    • servefile -tc gzip ~/Pictures # construct a tar file from any file or folder and compress it on the fly

      enter image description here

    BTW with this method I reached 1Gbps transfer speed (maximum speed of my LAN).

    Does this have a GUI? Can I connect to this uri using the Nautilus as a server?

    No GUI AFAIK, and probably not compatible with nautilus. It's just a simple http server. Maybe samba is more suited for your needs (first answer). Screenshots are from Firefox.

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM