Фон
Я пытаюсь автоматически выполнить команду, которая монтирует защищенный паролем ресурс Samba, когда мой пользователь входит в систему. Проблема в том, что я использую свой ноутбук совместно с другим пользователем, и янехочу, чтобы общий ресурс Samba был смонтирован, когда она входит в систему. Я хочу, чтобы он был смонтирован толькокогда я вхожу в систему. Это исключает редактирование моего файла fstab, поскольку я хочу, чтобы это было специфично для пользователя.
Предыдущие исследования
Я искал и просмотрел множество вопросов и ответов, связанных с установкой общих ресурсов Samba, включая "Монтирование общих ресурсов Samba при загрузке/входе в систему и использование скрипта" и "Правильная запись fstab для монтирования общего ресурса Samba при загрузке," но большинство ответов подразумевают редактирование fstab, что отлично подходит большинству людей, но это не то, что я ищу здесь.
Что я уже сделал
Я могу вручную смонтировать общий ресурс Samba из командной строки, выполнив следующие действия:
sudo mount -t cifs //centaroo.local/Me /media/Me -o uid=scott,gid=scott,credentials=/home/scott/.smbcredentials,iocharset=utf8,sec=ntlm,file_mode=0600,dir_mode=0700
Постановка задачи
Предыдущая команда отлично работает, когда я запускаю ее из командной строки — она запрашивает у меня пароль для получения разрешения sudo, я ввожу его, и команда запускается. Проблема в том, что когда я добавляю точно такую же команду в поле «Команда» в Настройки запускаемых приложений > Изменить программу запуска, сохраняю изменения, перезагружаюсь и снова вхожу в систему, общий ресурс Samba не монтируется, как я ожидал. Я подозреваю, что это потому, что мне нужны права root для запуска как sudo, а со сценарием в Настройки запускаемых программ я не могу его ввести, поэтому сценарий просто не работает.
Как это обойти?
решение1
Ладно, мне удалось решить это самостоятельно (с помощью других). Основная проблема, как я и подозревал, заключалась в том, что я пытался запустить команду, требующую привилегий root, не указывая пароль. Я решил эту проблему, следуя инструкциям в теме "Как выполнить команду sudo в скрипте без запроса пароля". Короче говоря, я создал скрипт оболочки под названием "script-mount-samba-share.sh", который не содержит ничего, кроме одной строки с командой монтирования, которую я хочу запустить:
mount -t cifs //centaroo.local/Me /media/Me -o uid=scott,gid=scott,credentials=/home/scott/.smbcredentials,iocharset=utf8,sec=ntlm,file_mode=0600,dir_mode=0700
Затем я изменил владельца файла на root:root и изменил его права доступа на 700. Затем я настроил sudo, чтобы разрешить запуск этого скрипта без ввода пароля, а затем я изменил поле «Команда» в Startup Applications Preferences > Edit Startup Program на «sudo /home/scott/script-mount-samba-share.sh» (без кавычек) и вуаля. В следующий раз, когда я перезагрузился и вошел под своим пользователем, общий ресурс Samba смонтировался без малейшего движения моего пальца. Я также проверил, что когда я перезагружаюсь и вхожу под другим пользователем, общий ресурс Samba не монтируется, а это то, что мне нужно.
Единственная небольшая проблема, которую я сейчас пытаюсь преодолеть, заключается в том, что когда я уже вошел в систему, а затем переключаю пользователей на кого-то другого, мой общий ресурс Samba все еще отображается в левой навигационной панели Nautilus, что вполне логично, поскольку он был смонтирован, когда я вошел в систему под своим собственным пользователем, но я не хочу, чтобы смонтированный общий ресурс отображался в Nautilus для другого пользователя, поэтому моя следующая задача — выяснить, как это реализовать.
решение2
Важно добавить имя пользователя и пароль для команды монтирования, иначе она может запросить пароль. Мне помогло следующее:
sudo mount -t cifs //centaroo.local/Me /media/Me -o uid=scott,gid=scott,user=,password=,iocharset=utf8,sec=ntlm,file_mode=0600,dir_mode=0700
конечно со всеми изменениями в /etc/sudoers