Package: rmfuse
RMfuseRMfuse provides access to your reMarkable Cloud files in the form of aFUSEfilesystem.  These files are
exposed either in their original format, or as PDF files that contain
your annotations.  This lets you manage files in the reMarkable Cloud
using the same tools you use on your local system.InstallationRMfuse requires Python 3.7 or later.  It also requires either FUSE3 and
thepyfuse3 library, or FUSE2 and
thellfuse library.
These can be installed from pip with RMfuse, or installed separately
via your system package manager.  This means that there are three main
ways to get RMfuse installed.Confused?  Look below to see examples for several OSes.Install with pyfuse3 through pipPrior to installing RMfuse, you will need to install FUSE3, along with
its header files, which are probably in a package with a name something
likelibfuse3-devel.  You will also need a C build system.  Once those
are installed, you can install RMfuse with pip:pip install rmfuse[pyfuse3]Alternatively, you may clone this repository and install withPoetry:poetry install -E pyfuse3Install with llfuse through pipPrior to installing RMfuse, you will need to install FUSE, along with
its header files, which are probably in a package with a name something
likelibfuse-devel.  You will also need a C build system.  Once those
are installed, you can install RMfuse with pip:pip install rmfuse[llfuse]Alternatively, you may clone this repository and install withPoetry:poetry install -E llfuseInstall with system FUSE packagesIf your system provides either pyfuse3 or llfuse in its package system,
you can install one of them that way.  You can then install RMfuse
without needing to specify either library:pip install rmfuseRMfuse will find whichever library is available at runtime.  (Note that
if you are using a venv, you will need to create it with the--system-site-packagesoption.  Otherwise, RMfuse will not be able to
see the library you installed.)Example installationsHere are some instructions for installations known to succeed.  These are
not the only solutions, so feel free to go another direction.  But if
you're confused by all of the options, you might want to start here.Debian-based systemsInstall the FUSE3 libraries and headers with apt:sudo apt install fuse3 libfuse3-3 libfuse3-dev build-essentialThen install RMfuse in your chosen environment:pip install rmfuse[pyfuse3]This was tested on Ubuntu 20.04.Fedora-based systemsInstall FUSE3 and pyfuse3 with dnf:sudo dnf install fuse3-libs python3-fusepy fuse3-devel python3-develBe sure to add~/.local/binto your path.  Then install with your
system's pip:pip install rmfuseThis was tested on Fedora 33.Arch-based systemsInstall RMfuse from this AUR package:rmfuseAUR.pyfuse3AURandllfuseare set
as optional. Choose the one you prefer and install it.For exampleyay -S rmfuse python-pyfuse3MacOSInstallmacFusewith brew:brew install macfuse pkg-configYou will need to allow a kernel extension and reboot.  Then install
RMfuse with the llfuse package:pip install rmfuse[llfuse]There is aknown bugwith writing
large files to RMfuse on a Mac.WindowsRMfuse can be run on Windows via the Windows Subsystem for Linux (WSL).
Currently only tested on Ubuntu 20.04 under WSL2. Follow the installation
instructions above for your Linux distribution, then launch RMfuse using the--allow-otherflag. The mounted directory will be accessible via Windows
explorer. For performance reasons you should choose a mount point under the WSL
file system. Some issues have been observed when accessing large files.UsageRMfuse installs the scriptrmfuse.  The script takes a single argument,
the path at which the filesystem should be mounted.  This must be an
existing directory.  Any files within that directory will be hidden as
long as RMfuse is mounted.mkdir ~/remarkable
rmfuse ~/remarkable(If you installed with Poetry, you may need to runpoetry run rmfuse.)The first time RMfuse is run, it will need aone-time codeto get
access to your reMarkable Cloud account.  You will be prompted to get
that code fromhttps://my.remarkable.com/connect/desktop, which may
require logging in to your reMarkable account.  RMfuse uses that code
to obtain tokens which it uses in the future to authenticate itself.Note that RMfuse will not produce any output by default.  (You can use-vor-vvto make it more talkative.)  It does not provide a user
interface to your files; instead you use another terminal or a file
browser to access the mounted directory.To unmount and halt RMfuse, use thefusermountcommand:fusermount -u ~/remarkableModesRMfuse offers several modes to display your reMarkable Cloud files.  You
can choose the mode with the-moption.annot: Displays all files in PDF format, with your annotations added.
This is the default mode.orig: Displays the original file for ebooks and PDF files.  Notebooks
are rendered as PDF files, as in theannotmode.raw: Displays all files as ZIP files, reflecting the underlying format
used by the reMarkable Cloud.  This may be useful when working with other
tools that expect files in this form.meta: Displays metadata about the files in JSON format.  Only useful for
debugging.RMfuse provides a special file named.modein root directory.  When read,
this file gives the current mode.  Writing a valid mode to this file will
switch the mode RMfuse is in.  Additionally, writingrefreshto this file
will cause RMfuse to refresh its information from the reMarkable Cloud.
(By default, this happens every five minutes.)~/remarkable $ cat .mode
annot
~/remarkable $ ls
book.pdf        document.pdf    notebook.pdf
~/remarkable $ echo orig > .mode
~/remarkable $ ls
book.epub       document.pdf    notebook.pdfCapabilitiesRMfuse allows reading of all files in the reMarkable Cloud.  Since reading
the file requires several HTTP requests, as well as local processing, reads
make take some time.  Running RMfuse in verbose mode (-vor-vv) will
display information about the actions underway.  Open files are cached, to
improve performance.  More sophisticated caching is planned for the future.RMfuse does its best to provide accurate metadata for the files.  However,
the reMarkable Cloud provides only modification dates, so that is reported
for creation and access dates as well.  File sizes inannotmode are
only estimates until the file is read for the first time.  This metadata
is cached locally to improve responsiveness in the future.Files can be renamed and moved within the RMfuse filesystem.  These changes
will be propagated to the reMarkable Cloud.  Changes to the file extension
will be ignored.Deleting files from a RMfuse filesystem moves them into the reMarkable
Cloud's trash area.  These files are accessible in the.trashhidden
directory in the root of the file system.  Deleting files within the.trashfolder removes them from the reMarkable Cloud.  (N.B.It is
not known if this deletes the files from the cloud, or just hides them
from clients.)EPUB and PDF files may be copied into the filesystem, and new directories
can be created.  These changes are uploaded to the reMarkable Cloud.
Copying other types of files into the RMfuse filesystem will fail silently
(unfortunately).  File extensions are ignored by RMfuse, and thus may
change when files are uploaded.  For instance, ifbook.epubis uploaded
and RMFuse is inannotmode, it will show up in the filesystem asbook.pdf.Existing files cannot be edited; they appear in read-only mode. If you
want to edit the contents of a file, you will need to copy it to your
local filesystem, edit it, and then copy it back to the RMfuse filesystem.
This will cause annotations to be lost (inorigmode) or flattened into
the document itself (inannotmode).There are several rendering options that affect the appearance of annotated
documents.  These can be set in a config file, which by default lives at~/.config/rmfuse/config.ini.  Runrmfuse --write-configto create a
config file with the defaults at that location.  The default mode and
mountpoint can also be set in this file.Known LimitationsThe file size for annotated files is just an estimate before the file
is first read.  This can confuse some tools which use the file size to
determine how much to read.  After reading the file once, the file size
will be correctly reported going forward; rerunning these tools a second
time is usually enough to get them working.To try to address this, RMfuse throws an error when a program tries to
read past the end of a file.  This can cause "No data available" errors
to be reported.  These are harmless.Adding a file other than an EPUB or PDF silently fails.  RMfuse does
throw an error when it has been given an invalid file, but this comes
too late for FUSE to pass the error back to the caller.  RMfuse may be
able to throw an error earlier, based on the first bytes it receives;
this will be investigated in the future.RMfuse caches open files in memory.  This is bad for large files (too
much memory used) and small files (we could cache several files).  A more
sophisticated caching system is planned.LibrariesRMfuse is powered byrmcl, for accessing
the reMarkable Cloud, and byrmrl, for
rendering annotated documents.  The early development of RMfuse can be found
in thermcl repositoryTrademarksreMarkable(R) is a registered trademark of reMarkable AS. rmrl is not
affiliated with, or endorsed by, reMarkable AS. The use of "reMarkable"
in this work refers to the company’s e-paper tablet product(s).CopyrightCopyright 2020-2021 Robert SchrollRMfuse is released under the MIT license.  See LICENSE.txt for details.Disclaimer of WarrantyRMfuse is provided without any warranty.  Users accept the risk of damages,
including the loss of data on their local system, on their reMarkable
device, and in the reMarkable Cloud.If it breaks, you get to keep both halves.