Using emacsclient inside of an Arch chroot
I just figured out how to get emacsclient working in an arch linux chroot. I use an arch chroot on alpine linux anytime there is some program that needs glibc, like the Android SDK tools or the buildroot environment I use to develop custom software for the norns and the LDK. Being able to edit files from the chroot using emacs makes things very convenient.
This hack has a special kind of cleverness to it that makes it particularly awful, so I just had to share.
Install arch chroot
This starts with having a configure arch chroot.
This needs to have emacsclient installed via
also had added an account with matching user name.
All the chroot stuff is held in a folder
with the chroot dir in
Starting emacs server
I start up the emacs server inside of emacs using
M-x server-start. Emacs is started on Alpine linux,
the host computer.
Making the socket visible to chroot environment
I was able to figure out via
netstat -lp that emacs server
socket was stored in
So, making the socket visible to chroot environment was a
matter of linking that folder via mount. Not entirely sure
-o bind does exactly, but I saw it used elsewhere
in the chroot tutorial linked above.
cd chroot64 mkdir -p tmp/emacs1000 mount -o bind /tmp/emacs1000 tmp/emacs1000
Making it save to the right filepath (the hack)
Using emacsclient on arch linux should open up the file in
emacs. Hooray! But, emacs does not understand the chroot
file path. So, when I open the file
from within the chroot environment, it will save it as
/home/paul/foo.txt in my host environment, and not
My solution to this? Abuse file links to make the paths match.
Luckily, my guest + host user names + home directories are the same, so that's a good first start.
On my alpine host, I make a symbolic link to my chroot arch linux home directory with
ln -s chroot/home/paul paul
So now I have a link
Inside the arch chroot environment, I make a folder called arch, and create the equivalent symlink in there.
# inside the chroot cd ~ mkdir arch cd arch ln -s ~ paul
Bam! Now the path
/home/paul/arch/paul is equivalent on
both my host and guest computers, and emacs will
be able to save in the correct place.
Pretty terrible, right?