Hello fellow lemmings

I am a long-time i3 user and have decided to switch to Sway. I have encountered a weird error which has left me utterly bamboozled.

I am using Ubuntu 24.04 which has gone from 20.04 -> 22.04 -> 24.04. It has Ubuntu-Gnome, i3 and Sway currently installed.

The issue

The error that I’m facing is when I’m using Sway, I simply don’t have sudo access.

This is what the error looks like

$ sudo visudo
[sudo] password for xavier666:
Sorry, user xavier666 is not allowed to execute '/usr/sbin/visudo' as root on <HOSTNAME>.

When I switch back to i3, my permissions are fine for the same user. I have not done any crazy modifications to the sudoer’s file as far as I can remember.

PS: I have added a command to no-sudo xavier666 ALL = NOPASSWD: /usr/bin/brightnessctl

The “fix”

I temporarily solved it by adding xavier666 ALL=(ALL:ALL) ALL to the sudoer’s file.

IMO, I think this should not be required. I don’t remember ever adding the default user to the file for all the installations that I have done. (But this is the first time I’ve installed Sway)

Logs/Outputs

Running sudo -l without the fix (on Sway)

Matching Defaults entries for xavier666 on <HOSTNAME>:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User xavier666 may run the following commands on <HOSTNAME>:
    (root) NOPASSWD: /usr/bin/brightnessctl

When I run the same command on i3, i get this (ALL : ALL) ALL extra line in the output. And when I run sudo -l with my fix on Sway, (ALL : ALL) ALL is present and the permission issue is fixed.

What is causing Sway to remove the root permission for the user?

Note: I’m just asking for the standard sudo behaviour. I’m not trying to run GUI applications as root.

  • mazzilius_marsti@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    38 minutes ago

    Hmm let’s try to isolate the bug to know if it’s sway or gdm messing up:

    Try to disable gdm: sudo systemctl disable gdm.service

    Logout/restart. You should be at the TTY, enter username and password to login. Then simply type sway

    Now, test your sudo commands within this sway session. Do you still get the same bug?

  • unhrpetby@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    3
    ·
    edit-2
    24 hours ago

    From my experience a user account usually needs to be in the “wheel” group to elevate privileges through sudo. So try that.

  • A_norny_mousse@feddit.org
    link
    fedilink
    arrow-up
    10
    ·
    2 days ago

    This likely has nothing to do with sway but with the way the sway session is started, as opposed to the i3 session.
    We need more info on this.

    Isn’t i3 Xorg only, and sway wayland only? That would mean the whole graphical server has also changed.

    • xavier666@lemm.eeOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      1 day ago

      but with the way the sway session is started, as opposed to the i3 session. We need more info on this.

      I’m using gdm to start sway. I’m using the laptop’s built-in fingerprint scanner to unlock (Not sure if it matters). I saved the fingerprint in the Gnome session long back.

      gdm probably looks inside /usr/share/wayland-sessions and finds sway.desktop and uses it to launch Sway.

      I’ve tried to keep things as vanilla as possible.

      Isn’t i3 Xorg only, and sway wayland only?

      Correct.

      Maybe wayland is launched using restrictive set of permissions.

      • phantomwise@lemmy.ml
        link
        fedilink
        arrow-up
        1
        ·
        24 minutes ago

        Does the same issue also happen if you launch sway from the tty and not from gdm ?

        I’ve never used gdm but it probably allow you to open a tty with Ctrl+Alt+F3, then log in and type sway.

      • Yardy Sardley@lemmy.ca
        link
        fedilink
        arrow-up
        6
        ·
        1 day ago

        One big difference is that sway doesn’t run as a login process (and neither does gdm), meaning none of your .profile files are getting sourced. Check how your environment variables differ between i3 and sway and see if that might be the issue.

        • xavier666@lemm.eeOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          12 hours ago

          Check how your environment variables differ between i3 and sway and see if that might be the issue

          Just running set for each session and then diff should be enough, right?

          • Yardy Sardley@lemmy.ca
            link
            fedilink
            arrow-up
            1
            ·
            1 hour ago

            That would work.

            I’m not sure what could be in (or missing from) your environment that would break sudo, but it’s a place to check at least.

      • A_norny_mousse@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        1 day ago

        gdm probably looks inside /usr/share/wayland-sessions and finds sway.desktop and uses it to launch Sway.

        And how did you use to start i3?

          • A_norny_mousse@feddit.org
            link
            fedilink
            arrow-up
            1
            ·
            edit-2
            11 hours ago

            This goes a little beyond me because I have no idea how gdm would differentiate Xorg or wayland sessions.

            Look into the session files themselves (.desktop) - they have an Exec= line. Then see if that’s maybe just a shell wrapper around something else, e.g.: file /usr/bin/sway and see what it does.

            That’s all I have.

            • xavier666@lemm.eeOP
              link
              fedilink
              English
              arrow-up
              2
              arrow-down
              1
              ·
              9 hours ago

              For i3, the desktop file is like this (present in /usr/share/xsessions)

              [Desktop Entry]
              Name=i3
              Comment=improved dynamic tiling window manager
              Exec=i3
              TryExec=i3
              Type=Application
              X-LightDM-DesktopName=i3
              DesktopNames=i3
              Keywords=tiling;wm;windowmanager;window;manager;
              

              And sway (present in /usr/share/wayland-sessions)

              [Desktop Entry]
              Version=1.0
              Name=Sway
              Comment=An i3-compatible Wayland compositor
              Exec=/usr/bin/sway
              Type=Application
              DesktopNames=sway
              

              Gdm probably sums up all the DE from both the wayland and x11 sessions.

              There are some files & directories in /etc/gdm3 but I’m too lazy to go through all of them

              Init       PostSession  Prime     config-error-dialog.sh  greeter.dconf-defaults
              PostLogin  PreSession   PrimeOff  custom.conf             Xsession
              

              Thanks for your help.

              • A_norny_mousse@feddit.org
                link
                fedilink
                arrow-up
                1
                ·
                4 hours ago

                but I’m too lazy to go through all of them

                OK. But you did want to solve this just because you’re interested?

      • A_norny_mousse@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        1 day ago

        You’re going to have to look at how that process works on Ubuntu and how it differes from Xorg session start.

        gdm probably looks inside /usr/share/wayland-sessions and finds sway.desktop and uses it to launch Sway.

        FWIW, these are all text files. Look at them.

        Sorry, I have to go now. More tonight, if you want.

        • xavier666@lemm.eeOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          1 day ago

          these are all text files

          Yeah, it just calls the executable mentioned in the .desktop file (/usr/bin/sway). It should not be a GDM, issue, right?

          I also checked that I don’t have seatd installed, which is a “minimal user, seat and session management daemon” mentioned in arch wiki (https://wiki.archlinux.org/title/Sway). Could it be related?

          Sorry, I have to go now. More tonight, if you want.

          No hurry, the fix I am using is not causing issue. I just want to know why this is happening. This is a fun research problem.

          PS: I checked Google and I didn’t find anyone who has faced the same issue.

  • Ada@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    1
    ·
    1 day ago

    Can you compare groups output under both sessions?

    Specifically, if you don’t show membership of sudo in your Sway session, try this

    loginctl enable-linger lazarus

    • xavier666@lemm.eeOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 day ago

      Inisde i3 WITHOUT FIX

      $ groups
      
      xavier666 adm cdrom sudo dip plugdev lpadmin lxd sambashare
      
      $ groups xavier666
      
      xavier666 : xavier666 adm cdrom sudo dip plugdev lpadmin lxd sambashare
      

      Inside sway WITH/WITHOUT FIX

      $ groups
      
      xavier666 root
      
      $ groups xavier666
      
      xavier666 : xavier666 adm cdrom sudo dip plugdev lpadmin lxd sambashare
      

      PS: I corrected the username, it should be xavier666. I corrected the main post.

      • A_norny_mousse@feddit.org
        link
        fedilink
        arrow-up
        4
        ·
        edit-2
        1 day ago

        $ groups

        xavier666 root

        Sorry what? As what user are you executing all these ‘groups’ commands? Unless Ubuntu does things significantly differently from Arch and Debian, there’s something very fishy going on here. The “normal” user should not be in the root group, and root should not be in the normal user’s group.

        Have you done other things beside the “fix” you mentioned?

        That “fix” from your op, btw, looks totally valid to me.

        • xavier666@lemm.eeOP
          link
          fedilink
          English
          arrow-up
          2
          ·
          12 hours ago

          As what user are you executing all these ‘groups’ commands?

          I’m using my default user (xavier666)

          The “normal” user should not be in the root group, and root should not be in the normal user’s group.

          I just made the user a root user/system administrator during the Ubuntu installation process, which is very standard.

          Have you done other things beside the “fix” you mentioned?

          AFAIK, I haven’t done any changes. This is a single user system. I checked the contents of /etc/sudoers and these are the only other lines of significance. I didn’t change them (Why are there % signs?)

          # User privilege specification
          root    ALL=(ALL:ALL) ALL
          xavier666    ALL=(ALL:ALL) ALL
          
          # Members of the admin group may gain root privileges
          %admin ALL=(ALL) ALL
          
          # Allow members of group sudo to execute any command
          %sudo   ALL=(ALL:ALL) ALL
          

          That “fix” from your op, btw, looks totally valid to me.

          It’s working fine also. However, I believe in “don’t touch what ain’t broke” and “why isn’t it documented?”

          However, in my installations I have never touched the sudoer file to make the ONLY user part of sudo group post install. Either I’m dumb or I’m launching sway/wayland with improper permissions.

          I also can’t find anything on the arch wiki which deals with this.

          Why isn’t the same problem happening on i3?

          • BaumGeist@lemmy.ml
            link
            fedilink
            arrow-up
            3
            ·
            edit-2
            10 hours ago

            (Why are there % signs)

            Good question, here’s the explanation man sudoers offers:

            The definitions of what constitutes a valid alias member follow.
            
                   User_List ::= User |
                                 User ',' User_List
            
                   User ::= '!'* user name |
                            '!'* #user-ID |
                            '!'* %group |
                            '!'* %#group-ID |
                            '!'* +netgroup |
                            '!'* %:nonunix_group |
                            '!'* %:#nonunix_gid |
                            '!'* User_Alias
            
                   A User_List is made up of one or more user names, user-IDs
                   (prefixed with ‘#’), system group names and IDs (prefixed with%and%#’ respectively), netgroups (prefixed with+’), non-Unix
                   group names and IDs (prefixed with%:’ and%:#’ respectively),
                   and User_Aliases. Each list item may be prefixed with zero or more
                   ‘!’ operators.  An odd number of!’ operators negate the value of
                   the item; an even number just cancel each other out.  User
                   netgroups are matched using the user and domain members only; the
                   host member is not used when matching.
            

            TL;DR % lets the system know the following word is a group name, instead of a username

          • A_norny_mousse@feddit.org
            link
            fedilink
            arrow-up
            2
            ·
            edit-2
            11 hours ago

            In that case Ubuntu DOES things differently. And weirdly imho, there’s no reason for the normal user to be in the root group since they still need privilege escalation to edit system files.

            If you use visudo to edit /etc/sudoers you don’t have to worry about the syntax.

            FWIW, this is what my perfectly healthy system looks like:

            $ sudo grep -vE '^[[:space:]]*#|^[[:space:]]*$' /etc/sudoers
            Defaults	env_reset
            Defaults	mail_badpass
            Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            Defaults	use_pty
            root	ALL=(ALL:ALL) ALL
            %sudo	ALL=(ALL:ALL) ALL
            @includedir /etc/sudoers.d
            
            $ groups
            a_norny_mousse adm dialout fax cdrom floppy tape sudo audio dip video plugdev netdev bluetooth lpadmin scanner
            

            You will notice that my user is in the sudo group; this is enough to give them admin rights as per sudoers.

            • xavier666@lemm.eeOP
              link
              fedilink
              English
              arrow-up
              1
              ·
              8 hours ago

              The output of the above command is nearly the same for me.

              Even though I have manually added myself to /etc/sudoers file, my groups output is very weird. It’s just xavier666 root

              Kind of stumped here.

              • A_norny_mousse@feddit.org
                link
                fedilink
                arrow-up
                1
                ·
                4 hours ago

                Even though I have manually added myself to /etc/sudoers file, my groups output is very weird.

                One has nothing to do with the other.

      • Ada@lemmy.blahaj.zone
        link
        fedilink
        arrow-up
        2
        ·
        1 day ago

        Try enable-linger. As I understand it, the issue is related to the way Sway handles Wayland sockets, and enable-linger kicks things off before Sway is involved.

        • xavier666@lemm.eeOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 day ago

          I’m unsure how to use the command. I added it to the main Sway config file, which means it’s executed whenever Sway starts (Post login).

          However, it didn’t make any difference. I also ran it manually

          $ loginctl enable-linger xavier666
          $ sudo visudo
          [sudo] password for xavier666:
          Sorry, user xavier666 is not allowed to execute '/usr/sbin/visudo' as root on <HOSTNAME>.