A while ago I started creating an alternative hardware monitoring application for Linux written in Java 25. Since it has remote monitoring capabilities, it also opens to door for setting up a sensor panel for your computer using a modern Android phone. In this post I’ll describe how to setup both lnxsense and lnxsense-panel-android.
Please be aware that all of this is still in very early alpha stages. Lnxsense does not yet support reading sensors from AMD CPU’s and AMD GPU’s and the Android app is only available as a debug build for Android 14 and newer and can’t be installed from F-droid (and it will probably never be available on the Play Store either). Please know that you will need some knowledge about Linux (you will need to provide root access) and you will need to sideload an unsigned APK to your phone. If you do not know what sudo implies or what sideloading APK’s implies, please avoid doing it altogether.
Installing lnxsense
In this post I’ll be using the pre-built binary to run lnxsense on my computer. You can download the latest version from Codeberg. You can extract the tarball (e.g. lnxsense-0.1.0.tar.gz) anywhere you want, I decided to go for ~/lnxsense/lnxsense-0.1.0/ .
You will also need to install some dependencies, which may be called slightly differently on different distributions. For Arch based distributions like Arch, Manjaro and CachyOS you can run this commands to install the required dependencies
sudo pacman -Syu jdk-openjdk libcpuid libblockdev libblockdev-smart libblockdev-nvme lib32-lm_sensors smartmontools
For Debian based distributions like Debian, Ubuntu, Mint and Pop!_Os you should run the following command to install the required dependencies.
sudo apt-get update
sudo apt-get install openjdk-25-jdk libcpuid-dev libsensors-dev smartmontools
sudo apt-get install libblockdev-dev libblockdev-nvme-dev libblockdev-smart-dev --no-install-recommends
By default, lnxsense works completely locally and does not allow remote connections to it. Go to the folder where you extracted lnxsense and edit the file launch_server.yaml which you can find in the server folder. Change these lines:
socket:
# Either UNIX or INET
socketType: UNIX
# Where the UI opens the socket if socketType is UNIX
socketPath: /tmp/lnxsense.socket
# Listen address if socketType is INET, should never be empty
socketAddress: "127.0.0.1:9999"
to this:
socket:
# Either UNIX or INET
socketType: INET
# Where the UI opens the socket if socketType is UNIX
socketPath: /tmp/lnxsense.socket
# Listen address if socketType is INET, should never be empty
socketAddress: "0.0.0.0:9999"
Now you can open a terminal, navigate to the directory where you extracted lnxsense and run the following command:
sudo java \
-XX:+UseCompactObjectHeaders \
-Xms32M \
-Xmx32M \
-XX:+AlwaysPreTouch \
-XX:MaxMetaspaceSize=64M \
-XX:+UseZGC \
-XX:MaxDirectMemorySize=1m \
-XX:+UseCompressedOops \
--enable-preview \
--enable-native-access server,libblockdev,libcpuid,libsensors,nvml \
--module-path server/lib/ \
--add-modules server,libblockdev,libcpuid,libsensors,nvml \
-Dspring.config.location=file://$PWD/server/launch_server.yaml \
com.pw999.lnxsense.Server
This will ask you for your user’s password because the application needs quite some privileges to access all the hardware sensors. You can run it without root privileges (just remove the sudo part in the command) but you won’t have access to for example the Intel CPU’s power usage or your disks health report (S.M.A.R.T.).
Once started you will see a lot of logs appearing but at the end you should see something like
2026-04-05T10:20:31.365+02:00 INFO 15776 --- [lnxsense-server] [e-socket-server] com.pw999.lnxsense.Socket : Starting socket thread
2026-04-05T10:20:31.370+02:00 INFO 15776 --- [lnxsense-server] [e-socket-server] com.pw999.lnxsense.Socket : Server will be listening on Inet socket 0.0.0.0:9999
Installing the Android sensor panel apk
At this point I will assume you already know what sideloading is, how you enable it (which is about to get a lot more difficult to do) and that you know what you’re doing. If you do not know what you’re doing I would advise against enabling developer mode on your phone.
On your phone, please download the latest APK from Codeberg and install it. To connect from your phone to lnxsense you will need the IP address of your computer. I usually run ip a in a shell and look for something like eth0 or enpXsY, but this results may vary on your setup.
When you launch the app on your phone you will be greeted with the following screen, here you can either enter the IP address of your machine or pick one that you saved previously. After entering the IP address you can either directly connect to it or save it as profile using the bookmark looking thing next to the Connect button.
Once connected to the server, you can see all the live sensor data from your computer:
You can tap on a sensor to get a small line graph of the sensor’s values with the min/max/avg values of that sensor. Tapping the line graph will maximize it.
You can also long press sensors to assign them to one of the dials. This can also be done via the configuration screen (tap the cogwheel on the top of the app) where you can also set the number of rows and columns for the dial screen.
Once you’ve assigned the sensors you want to monitor in the panel you can open the dial view using the button with all those squares at the top of the application.
Now you can monitoring your systems hardware sensors from an Android phone while playing games on Linux or doing other full-screen activities. As said in the introduction, it’s all very, very early alpha stage and while it works on my computer, results may vary depending on your setup.