v2.0.1-beta
Pre-releaseFeatures Added
- Initial support for reMarkable 2 using rm2fb
Known Issues
- #59 Disabling wifi in xochitl will crash the system service.
- #69 KOReader will not pause, and will instead cause the display resolution to get wonky. You can work around this by setting onPause/onResume.
onPause=killall -STOP luajit || true && /opt/koreader/fbdepth -d 16 -r 1
onResume=/opt/koreader/fbdepth -d 8 -r 1 || true && killall -CONT luajit
- #92 Auto suspend will still happen while plugged in while starting device. All you need to do is interact with the screen once and everything will start working normally.
- #100 Auto sleep settings are not saved between reboots.
- Switching between applications on the rM2 behind rm2fb will distort the screen.
Warnings
If you change the startup application to something other than the built-in launcher, this application will need to be able to request other applications be launched by the system service. Currently, there are no built-in shortcuts to provide a generic application switching mechanism.
When importing applications from draft, it will fail to import applications that have configured the call=
option to use arguments. This is due to oxide only supporting pointing at a single file for an application without arguments.
As part of implementing #38 users have lost the ability to choose what order applications will display. There is a plan to add this back in a future release as part of #11.
Currently, battery/wifi status will be checked every 3 seconds, but the UI should only change if they have changed. I'm not sure how much this will affect performance. Please let me know on the community Discord if you notice that your battery is draining quicker. It's been quite a few releases and nobody has said anything though, so you are likely fine.
By default the clock will use UTC, if you need to change your timezone you'll need to ssh into the device and use timedatectl set-timezone
to change your timezone (e.g. timedatectl set-timezone America/Denver
). You can see possible timezones by looking in /usr/share/zoneinfo/
(Don't trust the output of timedatectl get-timezones)
).
reMarkable 2 support requires modifying the service file to use rm2fb. Gestures are not supported yet, so some sort of background startup program to handle them will need to be created in order to emulate the button long press actions.
Manual Upgrade
- Replace the oxide, rot, erode, fret, and tarnish binaries on your device.
- Disable the oxide service:
systemctl disable --now oxide
- Enable the tarnish service:
systemctl enable --now tarnish
Automated Upgrade
- Run
opkg update
- Run
opkg upgrade
- Disable the oxide service:
systemctl disable --now oxide
- Enable the tarnish service:
systemctl enable --now tarnish
Manual Installation
- Copy oxide.tar.xz to your remarkable
- Decompress files into the root of your reMarkable.
- Reload systemd unit files:
systemctl daemon-reload
- Disable xochitl:
systemctl disable --now xochitl
- Reload dbus configuration:
systemctl reload dbus
- Enable and start oxide
systemctl enable --now tarnish
Automated Installation
- Add the toltec repository to your entware install
- Run
opkg update
- Run
opkg install oxide
- Disable the oxide service:
systemctl disable --now oxide
- Enable the tarnish service:
systemctl enable --now tarnish
Configuration
Configuration files can be in one of the following locations:
/etc
/opt/etc
/home/root/.config
The configuration folder contains the following:
oxide.conf
Application configuration file. The launcher will automatically maintain this file.
If you would like to manually add an application entry to oxide you can do so with the following comand:
rot apps call registerApplication 'QVariantMap:{"name": "unique name", "bin": "/path/to/executable", "icon": "/path/to/icon.png"}'
You have the following configuration options available to pass in:
- bin: Path to the executable to run.
- name: Unique name of the application.
- displayName: Name to be displayed for the application to the end user.
- description: Description of the application.
- icon: Path to the icon to display for the application.
- type: Application type, possible values are:
- 0: The application is intended to only run in the foreground. Send a STOP to the application when switching.
- 1: The application is intended to only run in the background. Never send a STOP to the application.
- 2: The application can run in both the foreground and the background. When pausing the application send a USR2 signal to the application. If it fails to respond with a USR2 signal in 1 second send a STOP signal to the application. When resuming the application send a USR1 signal to the application.
- onPause: Command to run right before pausing the application
- onResume: Command to run right before resuming the application
- onStop: Command to run right before killing the application.
- flags: String array (e.g.
["flag1","flag2"]
) of application flags. Possible values are:- autoStart: This background or backgroundable application should be automatically started when the system service is first starting up. Backgroundable applications will be moved to the background immediatly.
- system: This is a system application. System applications cannot be unregistered.
- hidden: This application should not be shown to the user.
You can also manually modify configuration while tarnish is not running by modifying /home/root/.config/Eeems/tarnish.conf
Usage
Oxide consists of five applications: the main launcher, the background service, the process manager, the settings manager, and the screenshot handler.
oxide - Launcher
After you have configured and launched oxide you can access the power menu from the power button on the top right of the screen. This will allow you to put the device to sleep, or to power off the device.
The menu button on the top left side of the screen will open up the tools menu. This allows you to refresh the grid, import applications from draft, or to open up the options dialog. Importing applications will only import applications that contain valid configuration for Oxide. This means that draft configuration that attempts to pass arguments to the call=
setting will not be imported.
Tapping on the wifi icon open up the wifi menu.
The options dialog will allow you to configure various settings in the application. You have the option to reload the settings from the conf
file on disk, or to close the options dialog and save the current settings to disk.
Press on an application to launch, or return to an application. Long press on it to see more information about the application. If the application is running you will also be presented with a button to kill the application. There will be a button to toggle if this application should be launched on startup. This will automatically disable launch on startup from another application.
tarnish - Background service
Press and hold the left button to switch back to the startup application.
Press and hold the middle button to launch the process manager.
Press the power button to suspend the device.
Right button and power button long presses are also recorded, but by default no action is taken.
erode - process manager
- There is a reload button on the top right of the screen that will refresh the list.
- You can click on the column headers to sort the list by that column.
- If you click on a kill button for a process you will be prompted on if you really want to kill the process. In that prompt you will have the option to kill the process (SIGTERM), or to force quit (SIGKILL) the process.
- You can exit the application by pressing the left arrow on the top left of the toolbar.
- If the process list is long enough, you can scroll it by swiping up or down on the list. After you have swiped the list will scroll.
rot - CLI API tool
- Usage from the command line only, run
rot --help
to see possible options. For more information on possible API values see the dbus specification files or the high level API design.
fret - Screenshot daemon
Will automatically start up and wait for right button long presses, at which time it will request a screenshot be taken and stored to /tmp/fb.png
. It will then execute /tmp/.screenshot
if it exists. Due to how the reMarkable preserves colour information in the framebuffer used to generate the screenshot, there may be colour in the screenshots that are not visible on the reMarkable itself.