Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to load config file - permission denied #672

Closed
1 task done
cbcoutinho opened this issue Sep 30, 2018 · 9 comments
Closed
1 task done

Unable to load config file - permission denied #672

cbcoutinho opened this issue Sep 30, 2018 · 9 comments
Assignees
Labels

Comments

@cbcoutinho
Copy link

Describe the bug
Redshift (v1.12) is unable to read my config file

To Reproduce
install redshift on OpenSUSE Tumbleweed:

$ sudo zypper install redshift

Run redshift

$ redshift -c ~/.config/redshift/redshift.conf
fopen: Permission denied
Unable to load config file.

Not really sure what it means with 'permission denied':

$ ls -l ~/.config/redshift/redshift.conf
-rw-r--r-- 1 chris users chris 2.0K 2018-09-30 16:23 /home/chris/.config/redshift/redshift.conf

Without stating config file redshift tries to use geoclue2, which i don't want:

Trying location provider `geoclue2'...
Using provider `geoclue2'.
Solar elevations: day above 3.0, night below -6.0
Temperatures: 6500K at day, 4500K at night
Brightness: 1.00:1.00
Gamma (Daytime): 1.000, 1.000, 1.000
Gamma (Night): 1.000, 1.000, 1.000
Using method `randr'.
Waiting for initial location to become available...
Unable to start GeoClue client: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Geolocation disabled for UID 1000.
Access to the current location was denied by GeoClue!
Make sure that location services are enabled and that Redshift is permitted
to use location services. See https://github.com/jonls/redshift#faq for more
information.
Unable to get location from provider.

Expected behavior
Redshift reads my config file

Software versions (please complete the following information):

  • OS: OpenSUSE Tumbleweed running X
  • Redshift version: 1.12
  • Redshift installed from: OpenSUSE package manager (zypper)

My config. Note, it uses manual:
; Global settings for redshift
[redshift]
; Set the day and night screen temperatures
temp-day=5700
temp-night=3000

; Enable/Disable a smooth transition between day and night
; 0 will cause a direct change from day to night screen temperature.
; 1 will gradually increase or decrease the screen temperature.
transition=1

; Set the screen brightness. Default is 1.0.
;brightness=0.9
; It is also possible to use different settings for day and night
; since version 1.8.
;brightness-day=0.7
;brightness-night=0.4
; Set the screen gamma (for all colors, or each color channel
; individually)
gamma=0.8
;gamma=0.8:0.7:0.8
; This can also be set individually for day and night since
; version 1.10.
;gamma-day=0.8:0.7:0.8
;gamma-night=0.6

; Set the location-provider: 'geoclue', 'geoclue2', 'manual'
; type 'redshift -l list' to see possible values.
; The location provider settings are in a different section.

; Use manual if internet is out
;location-provider=geoclue2
location-provider=manual

; Set the adjustment-method: 'randr', 'vidmode'
; type 'redshift -m list' to see all possible values.
; 'randr' is the preferred method, 'vidmode' is an older API.
; but works in some cases when 'randr' does not.
; The adjustment method settings are in a different section.
adjustment-method=randr

; Configuration of the location-provider:
; type 'redshift -l PROVIDER:help' to see the settings.
; ex: 'redshift -l manual:help'
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.

; NOTE: These are not used if location-provider = geoclue2
; Amsterdam
[manual]
lat=52.3
lon=4.9

; Configuration of the adjustment-method
; type 'redshift -m METHOD:help' to see the settings.
; ex: 'redshift -m randr:help'
; In this example, randr is configured to adjust screen 1.
; Note that the numbering starts from 0, so this is actually the
; second screen. If this option is not specified, Redshift will try
; to adjust all screens.
;[randr]
;screen=1

@jonls jonls self-assigned this Oct 1, 2018
@jonls
Copy link
Owner

jonls commented Oct 13, 2018

Thanks for the issue report. This seems most likely to be an issue with permissions somewhere in you config path. Maybe one of the directories in the path has the wrong permission? Have you checked the permissions of ~/.config, ~/.config/redshift, etc.? These need the execute (x) bit set. Check that the owner of these directories/file is also the same as the user that you're using to run Redshift.

Since this is unlikely to be a Redshift issue I'm closing this. Please feel free to reopen if you tried everything and still experience this issue.

@jonls jonls closed this as completed Oct 13, 2018
@jonls jonls added the question label Oct 13, 2018
@cbcoutinho
Copy link
Author

cbcoutinho commented Oct 13, 2018 via email

@jonls
Copy link
Owner

jonls commented Oct 15, 2018

Please reread my suggestion. You need x on the directories possibly.

@cbcoutinho
Copy link
Author

cbcoutinho commented Oct 15, 2018 via email

@jonls
Copy link
Owner

jonls commented Oct 15, 2018

Awesome, thanks!

@cbcoutinho
Copy link
Author

This ended up being an issue with (open)SUSE's AppArmour, which didn't update the allowed config path from ~/.conf/redshift.conf to ~/.config/redshift/redshift.conf whenever that was changed as the default in redshift.

Related bug is https://bugzilla.suse.com/show_bug.cgi?id=1111906

@davralin
Copy link

In case someone else stumbles upon this message on other distro's, the relevant bug in debian is here

@yannickperrenet yannickperrenet mentioned this issue Nov 6, 2021
1 task
rumpeltux added a commit to rumpeltux/redshift that referenced this issue Apr 18, 2022
Related bugs:
 * https://bugzilla.suse.com/show_bug.cgi?id=1111906
 * https://bugs.debian.org/988068
 * jonls#672
 * jonls#860

src/config-ini.c still looks for $HOME/.config/redshift.conf which
fails to open because the apparmor profile doesn’t allow it.

src/config-ini.c also does this:
   struct passwd *pwd = getpwuid(getuid());
   char *home = pwd->pw_dir;

Since getpwuid doesn’t have access to /etc/passwd* it returns NULL,
causing a segmentation fault in the line thereafter.
This code is not triggered if a config is specified (e.g.
-c redshift.conf) or $HOME/.config/redshift.conf exists.
@Jalle19
Copy link

Jalle19 commented Jul 30, 2024

Four years later and this still doesn't work without users manually editing /etc/apparmor.d/usr.bin.redshift or placing the configuration in a location very much not specified in the README. Unbelievable.

I wouldn't even have had to deal with any of this if it wasn't for geoclue2 shitting itself when Mozilla Location Services was axed some time ago, and the community as usual has literally no idea how to deal with it.

@Booligoosh
Copy link

Moving the file from ~/.config/redshift/redshift.conf to ~/.config/redshift.conf fixed it for me (Debian-based distro)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants