I thought I’ll make this thread for all of you out there who have questions but are afraid to ask them. This is your chance!

I’ll try my best to answer any questions here, but I hope others in the community will contribute too!

  • HATEFISH@midwest.social
    link
    fedilink
    arrow-up
    0
    ·
    7 months ago

    How can I run a sudo command automatically on startup? I need to run sudo alsactrl restore to mute my microphone from playing In my own headphones on every reboot. Surely I can delegate that to the system somehow?

    • Hiro8811@lemmy.world
      link
      fedilink
      arrow-up
      0
      ·
      7 months ago

      Try paveaucontrol, it has an option to lock settings plus it’s a neat app to call when you need to customise settings. You could also add user to the group that has access to mic.

    • Cyclohexane@lemmy.mlOPM
      link
      fedilink
      arrow-up
      0
      ·
      7 months ago

      Running something at start-up can be done multiple ways:

      • look into /etc/rc.d/rc.local
      • systemd (or whatever init system you use)
      • cron job
    • wolf@lemmy.zip
      link
      fedilink
      English
      arrow-up
      0
      ·
      7 months ago

      You got some good answers already, here is one more option: Create a *.desktop file to run sudo alsactrl, and copy the *.desktop file ~/.config/autostart (Might need to configure sudo to run alsactrl w/o password.)

      IMHO the cleanest option is SystemD.

    • baseless_discourse@mander.xyz
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      7 months ago

      If you run a systemd distro (which is most distro, arch, debian, fedora, and most of their derivatives), you can create a service file, which will autostart as root on startup.

      The service file /etc/systemd/system/<your service>.service should like

      [Unit]
      Description=some description
      
      [Service]
      ExecStart=alsactrl restore
      Type=simple
      
      [Install]
      WantedBy=multi-user.target
      

      then

      systemctl enable <your service>.service --now
      

      you can check its status via

      systemctl status <your service>.service
      

      you will need to change <your service> to your desired service name.

      For details, read: https://linuxhandbook.com/create-systemd-services/

      • HATEFISH@midwest.social
        link
        fedilink
        arrow-up
        0
        ·
        7 months ago

        This one seemed perfect but nothing lasts after the reboot for whatever reason. If i manually re-enable the service its all good so I suspect theres no issue with the below - I added the after=multi-user.target after the first time it didn’t hold after reboot.

        
        [Unit]
        Description=Runs alsactl restore to fix microphone loop into headphones
        After=multi-user.target
        [Service]
        ExecStart=alsactl restore
        
        [Install]
        WantedBy=multi-user.target
        

        When I run a status check it shows it deactivates as soon as it runs

        Apr 11 20:32:24 XXXXX systemd[1]: Started Runs alsactl restore to fix microphone loop into headphones.
        Apr 11 20:32:24 XXXXX systemd[1]: alsactl-restore.service: Deactivated successfully.
        
          • HATEFISH@midwest.social
            link
            fedilink
            arrow-up
            0
            ·
            7 months ago

            It seems to have no effect either way. Originally I attempted without, then when it didn’t hold after a reboot and some further reading I added the After= line in attempt to ensure the service isn’t trying to initiate before it should be possible.

            I can manually enable the service with or without the After= line with the same results of it actually working. Just doesn’t hold after a reboot.

            • baseless_discourse@mander.xyz
              link
              fedilink
              arrow-up
              0
              ·
              edit-2
              7 months ago

              That is interesting. BTW, I don’t assume that command will run forever right, i.e. it will terminate relatively soon? so that could be why the service is deactivated, not because it is not run. You can try to add ; echo "command terminated" at the end of ExecStart to see if it is terminated, you can also try to echo the exit code to debug.

              If the program you use has a verbose mode, you can also try to turn it on to see if there is any error. EDIT: indeed, alsactrl restore --debug

              On a related note, did you install the program via your package manager, and what distro are you running. Because sometimes SELinux will block the program running. But the error message will say permission denied, instead of your message.