envycontrol icon indicating copy to clipboard operation
envycontrol copied to clipboard

Does not work on Silverblue

Open ghost opened this issue 3 years ago • 14 comments

Hello, As you may know, Fedora Silverblue has a read-only filesystem where only /etc and /var are writable directories. Unfortunately, since your Python script relies on putting udev rules in /lib which is read-only, a tiny modification is required to make this work: swapping every /lib (there are only two) in the script with /etc. As I'm not really familiar with scriping with Python, I don't know what would be the cleanest way to implement this without rendering this script unusable on other distros. I just wanted to make you aware of this current issue. For now, I will be modifying it locally for myself, until a solution is found.

Thank you for making Fedora usable for the unlucky Nvidia Optimus owners!

ghost avatar Jun 30 '22 13:06 ghost

Hello there,

Thanks for letting me know.

Maybe we can try adding a flag called --silverblue or sth else that swaps file paths starting /lib with /etc.

Greetings.

El jue, 30 de jun. de 2022 08:34, ActualDisaster2447 < @.***> escribió:

Hello, As you may know, Fedora Silverblue has a read-only filesystem where only /etc and /var are writable directories. Unfortunately, since your Python script relies on putting udev rules in /lib which is read-only, a tiny modification is required to make this work: swapping every /lib (there are only two) in the script with /etc. As I'm not really familiar with scriping with Python, I don't know what would be the cleanest way to implement this without rendering this script unusable on other distros. I just wanted to make you aware of this current issue. For now, I will be modifying it locally for myself, until a solution is found.

Thank you for making Fedora usable for the unlucky Nvidia Optimus owners!

— Reply to this email directly, view it on GitHub https://github.com/geminis3/envycontrol/issues/49, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALY7IYNYWXYXEAGPHI53ZH3VRWO65ANCNFSM52JMHQ3A . You are receiving this because you are subscribed to this thread.Message ID: @.***>

bayasdev avatar Jun 30 '22 16:06 bayasdev

Thanks for responding so quickly! Yes, that would be awesome. The question is: Do you think that would change the behavior of the GNOME extension GPU profile selector? If so, then I would open an issue against that extension and see if the maintainer is open to adapt their code around this change.

ghost avatar Jun 30 '22 17:06 ghost

This can be fixed by making envycontrol an installable rpm

juni-purr avatar Jul 12 '22 16:07 juni-purr

The question is who would maintain it? Would it be submitted to the official Fedora repos? Even if not submitted to the Fedora repos, the RPM would require testing before getting published on GitHub. But all that aside: Would enough people benefit from this?

The reason why I am being so skeptical is because I don't have the expertise to do any of that/contribute and I don't want to waste dev time and QA on something that only I would benefit from.

ghost avatar Jul 12 '22 17:07 ghost

You can put it on Copr. People can benefit from this as anyone running Fedora can just install the RPM on their system.

juni-purr avatar Jul 12 '22 18:07 juni-purr

I don't like adding Coprs just like many other people don't. There is always this fear of them breaking updates. Also adding Coprs on Silverblue is not really that easy and a lot can go wrong. You basically have to copy a reference file (from Copr) into a directory and hope that rpm-ostree would pick the change up.

I would prefer an RPM from GitHub that I would manually install and update over Copr anyday.

ghost avatar Jul 12 '22 18:07 ghost

That is understandable, just putting an RPM on Github releases works. I do not know packaging software very well (especially for RPM distributions), but it would be both convenient and helpful for rpm and rpm-ostree users.

From what I heard from others, there isn't much clear documentation for creating RPMs, but you can get help from others.

juni-purr avatar Jul 12 '22 18:07 juni-purr

I also don't have experience with building and maintaining RPMs and I'm hesitant to ask for an RPM because of the lack of documentation.

ghost avatar Jul 12 '22 18:07 ghost

I guess I will try sometime.

juni-purr avatar Jul 14 '22 02:07 juni-purr

https://www.redhat.com/sysadmin/create-rpm-package I found a decent source on how to.

juni-purr avatar Jul 14 '22 21:07 juni-purr

I unfortunately didn't get it to work on rpm-ostree distributions.

juni-purr avatar Jul 23 '22 00:07 juni-purr

I have also tried to replace /lib to /etc in the script and it does not work on Fedora Kinoite because /usr/share/sddm/scripts/Xsetup is read-only.

Update: Integrated and hybrid mode works. Only nvidia does not.

juni-purr avatar Jul 23 '22 00:07 juni-purr

It seems that Silverblue is still not ready for the masses. I've been having a few other issues and contemplating switching back to Workstation because of this and other things.

ghost avatar Jul 23 '22 06:07 ghost

I'm testing this fix on Fedora Silverblue and I can confirm that everything works. I think that it is broken with SDDM.

juni-purr avatar Jul 23 '22 22:07 juni-purr

Is there any progress on this?

sith-on-mars avatar Apr 19 '23 15:04 sith-on-mars

@sith-on-mars I don't have Silverblue (or any other ostree/inmutable distro) support planned

bayasdev avatar Apr 19 '23 17:04 bayasdev

~~Note for people coming to this issue: You should be able to overlay the RPM package from the COPR build on Silverblue.~~

travier avatar Apr 21 '23 14:04 travier

My bad, it looks like the script directly writes to /lib: https://github.com/bayasdev/envycontrol/blob/main/envycontrol.py#L202

This is not recommended, on any distributions, not just Silverblue. Custom local udev rules should be installed in /etc/... as /lib or /usr/lib is for distribution provided rules only.

travier avatar Apr 21 '23 14:04 travier

I can confirm that simply cloning the repo and editing the python script to replace /lib/udev/ with /etc/udev/ in 2 places was enough to get this working for me running Fedora Silverblue 38 w/ Gnome Wayland

I forked it here if anyone wants to use it but you can easily edit the original script yourself as well.

I'll continue to add or update my version if people can commit some changes since I'm sure it can be improved for further compatibility. @bayasdev has indicated in the past that he has no plans to support immutable distros so hopefully this can help others somewhat.

alongwhile avatar Oct 27 '23 23:10 alongwhile

@bayasdev , @ghost, others, I notice that arch wiki documents the /etc/udev location as:

udev rules written by the administrator go in /etc/udev/rules.d/, their file name has to end with .rules.

And /lib/udev (/lib is symlinked to /usr/lib on fedora ws 39) as:

The udev rules shipped with various packages are found in /usr/lib/udev/rules.d/

Also, ...

f there are two files by the same name under /usr/lib and /etc, the ones in /etc take precedence.

https://wiki.archlinux.org/title/Udev

So, if /etc/udev vs /usr/lib/udev is an intentional design choice, what is the harm in envycontrol switching to /etc/udev ? It seems lile the right thing to do in general. envycontrol is overriding shipped behavior - right?

If the user is not using systemd, then it seems a completely different approach might be needed anyway.

Just challenging the need for a -silverblue or -immutable flag as mentioned above in https://github.com/bayasdev/envycontrol/issues/49#issuecomment-1171441927

Thoughts?

Incidentally, I found a different approach for integrated mode that does not require messing with udev rules. See #157

klmcwhirter avatar Mar 12 '24 15:03 klmcwhirter