Changes are marked with E

the following situation: I'm a college student who obviously needs to travel to college almost every day where I have a lot of downtime. At the moment, I own a pretty strong computer with a 4k display which is obviously too much to carry around with me, so I will buy a laptop.

However, and this is where my trouble begins, I absolutely despise having to mess with multiple systems that basically do the same job where I can avoid it. I know it's common practice to just have a laptop with its own system and files and copy over whatever you need whenever you need it, but everything on the laptop would basically just be a copy of the stuff on the computer which I'd have to maintain separately. E I'm especially talking about several IDE's I'm running at the moment which all need setup and all the projects I need to download and get running twice rather than just being good to go already. I know, mostly you can just copy over a config directory for each piece of software, but what about local testing databases. What about game saves that aren't stored in the home directoy and cannot be found easily.

So to sum it up, I've got better things to do with my time, so I'm looking for a solution to this. Here are a few ideas I've come up with so far and I'd love some thoughts from experienced users who might have valuable input or experience with setups like the following. A few things to add before I go:

  • I won't use the machines at the same time. Never. And if I do, I'm just going to read files, not change anything
  • I don't have the laptop yet, so I'm free to choose there
  • battery life is important to me, this will come in later in the mobile first idea
  • I'm on Linux and this is only meant for solutions for Linux. I won't switch, too much is good about the system as I have it right now
  • E as this is my private computer, I do the usual browsing, limited gaming (that doesn't have to be portable though) and document editing
  • I'm also a programmer though who (has to run) / (is running) 4 different IDEs regularly plus local webserver, database and what not

E Last note: I am a curious person which is the main reason I want to try this, not necessarily because it brings a whole lot of benefit over just running two systems and copying as needed. I want to see how efficient I can get it without breaking anything major and test the limits of what is doable right now. I'm partly inspired by an article from a source I can't remember where they talked about how it shouldn't matter where you're working, you should always get what you were working on last (which is obviously not completely doable right now, but this is one step towards that feeling).

Shared drive

Install separate systems on both machines and just set up a shared drive of some kind to synchronize the home folder. If you go with a rolling release system, you could have the system quite similar without synchronizing it by hand, it'll just take the initial setup time to do both.


  • not much setup time
  • no experiments, this has been used a lot


  • system maintenance has to be done twice
  • I guess the shared drive would be on the computer, so I can't access files on the laptop when I don't have a good internet connection (on the train)


Honestly, I haven't looked into this a lot, but I think I get the basic idea. People have suggested xpra, will update here as soon as I've tested it.


  • You absolutely completely totally only work on one system, the laptop system is more or less just an expedient to connect to the computer
  • You can get away with a very cheap laptop


  • Well, it's a remote session, it's probably slow
  • no internet, no working. With a shared drive you can at least do something in a temporary directory

System on a stick

The idea here is to combine any of the techniques listed here with a movable system. You install a system on a 16gb stick and get the files from somewhere else (maybe just mount the home directory and leave everything else on the stick or just have one directory remotely hosted with big files and backups).


  • Well, it's only one system. Hurray.
  • technically you don't even need a laptop if there are computers where you're going


  • stupid thing hanging out of and blocking one USB port at all times. How dare you pull it out when I'm working. How dare I forget it somewhere and never get my system back.
  • you still need a backup system on both machines in case this one gets lost or something

"Mobile first"

Get a powerful laptop and just buy a monitor and maybe peripherals to work more comfortably at home. No second machine altogether.


  • Probably less expensive
  • really cool solution with few technical problems


  • if you already own a good PC like me, you might not feel like spending another 1000+ bucks on a laptop in order not to downgrade too far
  • well, good laptops have bad battery life. That's not something for me

VCS (parts of) your file system

This would probably require some kind of version control system with which you control which files where changed. Those files are "committed" (synchronized) as soon as you're in the same network or as soon as you have enough bandwidth available. E People in the answer said this is very well doable using a git server / ownclowd combined with a proper cronjob to not have to worry about it.


  • complete mirror, always have everything with you, even without internet, you can synch later
  • no double maintenance, only the git repo


  • well, you have to synch a lot back and forth.
  • git server setup, git repo maintenance


Put the software you need on all computers in a VM (or one each) and either move them between machines or host them online.


  • very fine control over the versioning of the software
  • almost guaranteed data integrity


  • a lot of overhead (not only but mostly disk space) because you're at least installing 2 systems on each machine - the host and the VM. Also, extra startup time, depending on how you set it up
  • if I can trust my experience, this will take some time to set up if you're into live debugging on your phone for example because you'll need to forward the USB ports and stuff

Sooo, thanks for reading thus far. The four ideas are ordered by which I think would probably the best model. All of these are not really perfect in my opinion, but hey, what's perfect in this world. As I said, I'm happy about any input.

  • When I traveled more, X-Forwarding is what I always did. No, it's not too slow unless you are doing heavy graphics on a slow connection. In most cases, it was no worse than working through SSH. I highly recommend X-Forwarding but Linux will no longer be able to do this if your system uses wayland. – Rob Apr 10 '16 at 12:37
  • @Rob thanks for the input. Have you also done coding for one or two hours straight with X-Forwarding? The thing I'm getting at: does it get annoying having that tiny bit of lag at some point or is it really "whatever". That would be awesome, I think then I'd start with that. – Yorrd Apr 10 '16 at 12:40
  • 1
    I've coded for 8 hours over several days. The lag is minimal to not noticeable at all but, again, depends on your connection and which program you are running. In my case, I worked over wifi in one city, via DSL, to my home office. I even ran Firefox. – Rob Apr 10 '16 at 12:42
  • 1
    You should also browse through the stackexchange sister site softwarerecs for ideas. – meuh Apr 10 '16 at 18:27
  • 1
    When using X11 forwarding, look at xpra. "It differs from standard X forwarding in that it allows disconnection and reconnection without disrupting the forwarded application." – meuh Apr 10 '16 at 19:18

My recommendation is to first determine (and state for us) your actual needs rather than perceived issues.

So most importantly what are your intended uses? Are you a programmer? A computer science student? In another field? What programs do you want to use? How comfortable are you with simple shell scripting. This will make a huge difference to a good recommendation.
If you are a programmer I recommend maintaining systems separately with setup files such as .bashrc maintained through a github repository. This would be your mirror file system option.
If you are not a programmer I would recommend using remote machines that you connect to from wherever you are. You'll still want to have a fairly powerful computer to help minimize the lag that's always present.

At the end of the day there is no perfect solution and the right approach depends on more specifics that you have given us. There is also always a balance between automating stuff to make life easier and over-automating to the point that when things break (they always do) you have no clue how to fix it. I wouldn't spend too much time on this though. Try one solution and see if it works for you and change or tweak if it isn't.

As mentioned in comments I have to keep my .bashrc working on max and ubuntu and on systems where I haven't yet installed tools. here it is:

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
shopt -s histappend checkwinsize
PROMPT_COMMAND='history -a'
test -f ~/.bash_functions.sh && . $_
test -f ~/.bash_aliases && . $_
test -f ~/.eq_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -f /etc/bash_completion && ! shopt -oq posix && . /etc/bash_completion
test -f ~/.autojump/etc/profile.d/autojump.sh && . $_
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
set -o vi # vi at command line
export EDITOR=vim
export PATH="/usr/local/heroku/bin:$PATH" # Added by the Heroku Toolbelt
export PYTHONPATH=/usr/local/lib/python2.7/site-packages/ # for meld mdd 4/19/2014
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" # friendly for non-text files
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
export PATH=$HOME/.node/bin:$PATH
  • Thanks for your input, much appreciated. I've made some additions marked with an E. Why are you recommending having separate systems as a programmer? With the .bashrc thingy you mean having a collection of files which basically inflate my operating workspace for me? But what about the data like databases, what about file changes which I don't want to push via a version control system for each and every project separately? I know I'm probably overthinking it, but I guess that's OK considering that I want to really test the limits on how far I can go – Yorrd Apr 10 '16 at 12:33
  • ok so you are a programmer. That's good to know. Over 30 years I've not found a truly remote system isn't maintainable and it's just better to maintain stuff manually with setup files. Yes it's not ideal and has it's own downsides but it's what has worked best for me. I divide my time between osx and ubuntu so I have the challenge of making sure my .bashrc works well for both and it easily readable and maintainable. This file and others are available at github.com/durrantm/setups – Michael Durrant Apr 10 '16 at 13:26
  • Thanks a lot for your effort! I'll come back to this if it turns out X-Forwarding doesn't do what I want. If it does, it just seems to fill my needs with less work ;) let's see... – Yorrd Apr 10 '16 at 14:22

You should also probably look at virtual machines, and cloud solutions. VM's are very common now, and used for many problems. You can have many, say each with a particular IDE, or version of it, or a different OS. You can take snapshots so you can go back in time when you make an mistake, and of course you can move them from hardware to hardware. They can share filesystems through nfs or the cloud and so on. You can even buy occasional extra CPU power on services like amazon EC2 which provides ubuntu instances.

  • Fair point, I'll add that to my list for future reference. However I don't think this one is for me because it seems to add a lot of overhead. If you have the VMs on the computer, you'd have to copy them over every time you swtch machines. If they're on the internet, I"d have to pay for some kind of hosting, whatever it be (don't really have money to spare as a college student). Also while it's a handy feature, I don't really need version control of my software, I just need to share it quickly. Thanks for your input! – Yorrd Apr 10 '16 at 14:25

Short & sweet

You can setup a hybrid of git repositories and owncloud for example, add virtualbox / usb storage (maybe with lvm) and the setup should do the job.


  • This looks like a brilliant way to get your system to any place you want without much effort. The issue I'm having with this is that you'll have to then continuously update that git repo in order to have current sources. That would mean I'd have to fetch the latest version on the train because if I work with the old version until I'm at college, I'll have to mess about with merging the changes and stuff like that. Certainly better than copying everything every time, but I'm missing some efficiency here considering that I'm only doing this for 2 machines, not 10 (then I'd love it) – Yorrd Apr 10 '16 at 16:26
  • you mean to update the git repo from the home pc? would a cronjob do? maybe i miss a point here? – Aurigae Apr 10 '16 at 16:33
  • owncloud updates automatically as well - with dyndns or a sdtatic ip you could even access the home machine either with git or the owncloud - maybe i really miss a crucial point here :) – Aurigae Apr 10 '16 at 16:33
  • 1
    another tool that may be of interest github.com/bup/bup – Aurigae Apr 10 '16 at 16:40
  • 1
    ill follow that thread def - maybe some procrastination helps, lol – Aurigae Apr 10 '16 at 16:42

For many things, on Linux, you can get away installing to a small USB3 stick (e.g. I use SanDisk ultra fits, and my usual distro is Ubuntu Studio). This is what I do with my laptops. Then I can move it from machine to machine without issue, including between laptop and desktop. And indeed my desktop workstation can also boot said usb drive in a VM, backup work to a hard drive on the workstation, and so on. It depends on whether you need a faster system drive or more storage. (They are dead cheap, so when wearing one out, just move to a new one.)

  • Thanks, adding to question post. This might indeed be a good option in combination with any of the above to store big files (because I don't feel like buying a flash drive with 128gb) – Yorrd Apr 10 '16 at 18:54
  • I use spinning disks for large files (e.g. media). In addition, my workstations have Icydocks in which I put SSDs, which can be removed and put in USB3 enclosures and used as boot drives. My largest USB sticks are 64GB, and many are 16GB or 32GB. For many use cases, if your large media is stored elsewhere, that is plenty. (Be warned that it is sensible to disable swap if you do this, to save wear on the stick, and then you have the potential for out of memory issues to cause problems.) In the case of the old HP servers I have, I tend to stick ubuntu on a flash drive in the internal usb slot. – John Allsup Apr 13 '16 at 13:14
  • Interesting insights. Having swappable hard drives is probably overkill for me because I'm literally only talking about 2 machines. But I definitely see this as a possibility if I'm some day thinking about a server machine. I do realise 16 GB is plenty for a system, that's why I'd probably go for that if I end up going for the "system on a stick" solution, don't really have the money to go for bigger SSD drives. – Yorrd Apr 13 '16 at 14:11
  • 1
    The smallest, cheapest SSDs are still pretty good. Just have a solid contingency plan in case of failure. – John Allsup Apr 15 '16 at 0:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.