t2linux/T2-Debian-and-Ubuntu-Kernel

Touchbar stops working after reboot

Rom888 opened this issue ยท 44 comments

Rom888 commented

After this command it starts working:
sudo touchbar --restart

$ journalctl --boot=0 | grep tiny-dfr

Oct 26 11:20:53 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 26 11:20:53 mb tiny-dfr[792]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 26 11:20:53 mb tiny-dfr[792]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 26 11:20:53 mb tiny-dfr[792]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 26 11:20:53 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 26 11:20:53 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 26 11:20:53 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 1.
Oct 26 11:20:53 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 26 11:20:53 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 26 11:20:53 mb tiny-dfr[847]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 26 11:20:53 mb tiny-dfr[847]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 26 11:20:53 mb tiny-dfr[847]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 26 11:20:53 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 26 11:20:53 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 26 11:20:54 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 2.
Oct 26 11:20:54 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 26 11:20:54 mb systemd[1]: tiny-dfr.service: Start request repeated too quickly.
Oct 26 11:20:54 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 26 11:20:54 mb systemd[1]: Failed to start tiny-dfr.service - Tiny Apple silicon touch bar daemon.

machine:

macOs: Ventura 13.2

Ubuntu 23.04
6.5.9-t2-lunar

MacBookPro16.1
Intel Core i9 2.3g

hybrid graphics:
Intel UHD graphics 630
AMD radeon pro 5500M

Does running sudo touchbar --restart turn it on?

Rom888 commented

Yes

Run this whole command:

cat <<EOF | sudo tee /etc/systemd/system/system/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=30
StartLimitBurst=2

[Service]
ExecStartPre=/bin/sleep 3
ExecStart=/usr/bin/tiny-dfr
Restart=always

[Install]
WantedBy=multi-user.target
EOF

cat <<EOF | sudo tee /usr/share/tiny-dfr/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=30
StartLimitBurst=2

[Service]
ExecStartPre=/bin/sleep 3
ExecStart=/usr/bin/tiny-dfr
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo touchbar --restart

Then see if this is fixed or not

Rom888 commented

It worked after the first reboot, but didn't work after the second.

again, is is working if you run sudo tiny-dfr after second reboot?

Rom888 commented

sudo tiny-dfr
or
sudo touchbar --restart
?

Either works

If yes, then try this. Note that it would delay the turning on of touchbar by 7 seconds, so be a bit patient.

cat <<EOF | sudo tee /etc/systemd/system/system/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=30
StartLimitBurst=2

[Service]
ExecStartPre=/bin/sleep 7
ExecStart=/usr/bin/tiny-dfr
Restart=always

[Install]
WantedBy=multi-user.target
EOF

cat <<EOF | sudo tee /usr/share/tiny-dfr/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=30
StartLimitBurst=2

[Service]
ExecStartPre=/bin/sleep 7
ExecStart=/usr/bin/tiny-dfr
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo touchbar --restart
Rom888 commented

no, doesn't work after:
sudo touchbar --restart

what does sudo tiny-dfr show.

Rom888 commented

if I run
sudo tiny-dfr
touchbar stars working
but I don't get control back in the terminal, no response

ctrl+c to get control of terminal (this will turn off the touchbar). And run the command I sent which delayed it by 7 seconds

After running that command, restart.

Rom888 commented

it doesn't work after reboot

lemmyg commented

Has stop working after Ubuntu pkg update. Did you try to remove the config in /etc/tiny-drf.conf and reinstall the pkg?

if you do this:

Run sudo systemctl disable --now tiny-dfr

Then restart. The touchbar won't turn on after restart.

Then run sudo systemctl enable --now tiny-dfr and wait for 10 sec, does touchbar turn on?

Rom888 commented

Did you try to remove the config in /etc/tiny-drf.conf and reinstall the pkg?

No

lemmyg commented

make sure you remove /etc/tiny-dfr.conf.orj before you reinstall

sudo rm /etc/tiny-dfr.conf.orj
sudo apt remove tiny-dfr
sudo apt autoremove
sudo apt update
sudo apt install tiny-dfr
Rom888 commented

I don't have /etc/tiny-dfr.conf.orj
only /etc/tiny-dfr.conf

Rom888 commented

Reinstalled, touchbar starts working
then ran sudo systemctl disable --now tiny-dfr
then restarted, but the touchbar turned on after restart.

So your problem is fixed now.

Rom888 commented

I reconfigured it using touchbar --mode
and after that it doesn't work

$ sudo tiny-dfr
thread 'main' panicked at src/main.rs:620:53:
called `Result::unwrap()` on an `Err` value: TOML parse error at line 11, column 23
   |
11 | [layers.primary_layer = "special"
   |                       ^
invalid table header
expected `.`, `]`

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

I see that in the /etc/tiny-dfr.conf the headers of the section doesn't close ']'

[time]
use_24_hr = 1

[layers.primary_layer = "specialextended"
buttons = [
    { label = "F1", key = "Key::F1", mode = "text" },
...

BTW reverting back to tiny-dfr to 0.1.3-5 and sudo cp /etc/tiny-dfr.conf.orj /etc/tiny-dfr.conf restores the touchbar after reboot

OK. I found the following:

  1. when you install the new tiny-dfr, it puts the new config which is OK
  2. you can change it manually and it immediately shows the changes in the touchbar (I changed the layers.tertiary2_layer_buttons to show F7-F12 buttons for the debugging my applications and it worked)
  3. But when you try to modify the config with help of touchbar (like sudo touchbar --mode) it ruins the config.
    First 2 sections received the names [layers.primary_layer = "specialextended" and [layers.secondary_layer = "function" (no closing brackets ']')

I couldn't find where to put patch for touchbar. So here it is to fix the issue

--- touchbar_old        2023-10-26 16:41:03.569827697 -0400
+++ touchbar    2023-10-26 16:54:20.411835314 -0400
@@ -102,10 +102,10 @@

 echo -e "\nEnter the mode do you want to display by default on the touchbar:"
 get_mode
-sed -i "s/primary_layer.*/primary_layer = \"$mode\"/g" /etc/tiny-dfr.conf
+sed -i "s/primary_layer[ ]*=.*/primary_layer = \"$mode\"/g" /etc/tiny-dfr.conf
 echo -e "\nEnter the mode that you want to be displayed on the touchbar after pressing fn key:"
 get_mode
-sed -i "s/secondary_layer.*/secondary_layer = \"$mode\"/g" /etc/tiny-dfr.conf
+sed -i "s/secondary_layer[ ]*=.*/secondary_layer = \"$mode\"/g" /etc/tiny-dfr.conf
 cat <<EOF

Check 0.1.4-2

Rom888 commented

'touchbar --mode' works now

but the touchbar still doesn't work after reboot:

$ journalctl --boot=0 | grep tiny-dfr
Oct 27 08:15:12 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:15:12 mb tiny-dfr[846]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 27 08:15:12 mb tiny-dfr[846]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 27 08:15:12 mb tiny-dfr[846]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 1.
Oct 27 08:15:12 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:15:12 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:15:12 mb tiny-dfr[922]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 27 08:15:12 mb tiny-dfr[922]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 27 08:15:12 mb tiny-dfr[922]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 2.
Oct 27 08:15:12 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Start request repeated too quickly.
Oct 27 08:15:12 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:15:12 mb systemd[1]: Failed to start tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:15:14 mb systemd[1]: tiny-dfr.service: Start request repeated too quickly.
Oct 27 08:15:14 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:15:14 mb systemd[1]: Failed to start tiny-dfr.service - Tiny Apple silicon touch bar daemon.

Let's try this. In case the touchbar is not able to start on boot, it waits for 5 sec and starts it again, and in total makes 5 such attempts. So wait for a min after restarting.

cat <<EOF | sudo tee /etc/systemd/system/system/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
ExecStart=/usr/bin/tiny-dfr
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

cat <<EOF | sudo tee /usr/share/tiny-dfr/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
ExecStart=/usr/bin/tiny-dfr
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo touchbar --restart
Rom888 commented

It started working, but it doesn't work after reboot.

$ journalctl --boot=0 | grep tiny-dfr
Oct 27 08:44:52 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:44:52 mb tiny-dfr[860]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 27 08:44:52 mb tiny-dfr[860]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 27 08:44:52 mb tiny-dfr[860]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 1.
Oct 27 08:44:52 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:44:52 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:44:52 mb tiny-dfr[924]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 27 08:44:52 mb tiny-dfr[924]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 27 08:44:52 mb tiny-dfr[924]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 2.
Oct 27 08:44:52 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Start request repeated too quickly.
Oct 27 08:44:52 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 08:44:52 mb systemd[1]: Failed to start tiny-dfr.service - Tiny Apple silicon touch bar daemon.

Also having same errors with touchbar except it doesn't work at all for me. running Kubuntu.

Host: MacBookPro15,2 1.0
Kernel: 6.1.60-t2-mantic
Uptime: 7 mins
Packages: 2223 (dpkg)
Shell: bash 5.2.15
Resolution: 1680x1050
DE: Plasma 5.27.8
WM: KWin
Theme: [Plasma], Breeze [GTK2/3]
Icons: [Plasma], breeze [GTK2/3]
Terminal: konsole
Terminal Font: CaskaydiaCove Nerd Font Mono 13
CPU: Intel i5-8279U (8) @ 4.100GHz
GPU: Intel CoffeeLake-U GT3e [Iris Plus Graphics 655]
Memory: 2104MiB / 15839MiB

Rom888 commented

after reboot:

$ ls /etc/systemd/system/system/tiny-dfr.service
ls: cannot access '/etc/systemd/system/system/tiny-dfr.service': No such file or directory

after reboot:

$ ls /etc/systemd/system/system/tiny-dfr.service
ls: cannot access '/etc/systemd/system/system/tiny-dfr.service': No such file or directory

Its /etc/systemd/system/tiny-dfr.service

Also, if you want only the F keys and media controls, you can switch to the older mode by sudo touchbar --switch

Also having same errors with touchbar except it doesn't work at all for me. running Kubuntu.

Host: MacBookPro15,2 1.0 Kernel: 6.1.60-t2-mantic Uptime: 7 mins Packages: 2223 (dpkg) Shell: bash 5.2.15 Resolution: 1680x1050 DE: Plasma 5.27.8 WM: KWin Theme: [Plasma], Breeze [GTK2/3] Icons: [Plasma], breeze [GTK2/3] Terminal: konsole Terminal Font: CaskaydiaCove Nerd Font Mono 13 CPU: Intel i5-8279U (8) @ 4.100GHz GPU: Intel CoffeeLake-U GT3e [Iris Plus Graphics 655] Memory: 2104MiB / 15839MiB

You are using an LTS kernel, tiny-dfr won't work on that. Remove it by running sudo apt remove tiny-dfr

After removing, boot into macOS and then back to linux

Rom888 commented

applied this (...systemd/system/tiny...):

cat <<EOF | sudo tee /etc/systemd/system/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
ExecStart=/usr/bin/tiny-dfr
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

After the first reboot everything is fine

$ journalctl --boot=0 | grep tiny-dfr
Oct 27 08:58:54 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.

After the second and third reboot it also works:

$ journalctl --boot=0 | grep tiny-dfr
Oct 27 09:04:45 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 09:04:45 mb tiny-dfr[833]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 27 09:04:45 mb tiny-dfr[833]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 27 09:04:45 mb tiny-dfr[833]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 27 09:04:45 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 27 09:04:45 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 09:04:50 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 1.
Oct 27 09:04:50 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 09:04:50 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.

applied this (...systemd/system/tiny...):

cat <<EOF | sudo tee /etc/systemd/system/tiny-dfr.service
[Unit]
Description=Tiny Apple silicon touch bar daemon
After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
ExecStart=/usr/bin/tiny-dfr
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

After the first reboot everything is fine

$ journalctl --boot=0 | grep tiny-dfr
Oct 27 08:58:54 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.

After the second and third reboot it also works:

$ journalctl --boot=0 | grep tiny-dfr
Oct 27 09:04:45 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 09:04:45 mb tiny-dfr[833]: thread 'main' panicked at src/backlight.rs:46:40:
Oct 27 09:04:45 mb tiny-dfr[833]: called `Result::unwrap()` on an `Err` value: No backlight device found
Oct 27 09:04:45 mb tiny-dfr[833]: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Oct 27 09:04:45 mb systemd[1]: tiny-dfr.service: Main process exited, code=exited, status=101/n/a
Oct 27 09:04:45 mb systemd[1]: tiny-dfr.service: Failed with result 'exit-code'.
Oct 27 09:04:50 mb systemd[1]: tiny-dfr.service: Scheduled restart job, restart counter is at 1.
Oct 27 09:04:50 mb systemd[1]: Stopped tiny-dfr.service - Tiny Apple silicon touch bar daemon.
Oct 27 09:04:50 mb systemd[1]: Started tiny-dfr.service - Tiny Apple silicon touch bar daemon.

Isn't this the same as I asked you to do before?

Rom888 commented

You asked me this:
cat <<EOF | sudo tee /etc/systemd/system/system/tiny-dfr.service

but it looks like it should be:
cat <<EOF | sudo tee /etc/systemd/system/tiny-dfr.service

Ooh my bad

Make sure you do /usr/share/tiny-dfr/tiny-dfr.service as well

Rom888 commented

Yes, I just copied it.