Классический способ UNIX - сделать сценарий setuid :
$ sudo chown root gogui.sh #not necessary if root is already the owner of the file
$ sudo chmod u+s gogui.sh
Это установит специальный бит разрешения для файла:
$ ls -l gogui.sh
-rwsr-xr-x 1 root root [omitted] gogui.sh
(обратите внимание на букву s
вместо x
в четвертой позиции.)
Если вы сделаете это, каждый раз, когда вы запускаете скрипт, он будет запускаться с привилегиями владельца файла, вместо тех, которые принадлежат пользователю, который его запускает.
Теперь вы можете упростить свой сценарий gogui.sh
, чтобы он содержал только
/usr/sbin/service lightdm start
. Обратите внимание, что я добавил явный путь к исполняемому файлу (который я нашел, набрав which service
): это необходимо в файлах setuid, потому что в противном случае будет выполнена первая программа с именем service
, найденная в вашем PATH
.Забыть явный путь было бы огромной проблемой безопасности, поскольку это означает, что любой пользователь может настроить переменную PATH
и запустить программу по своему выбору с привилегиями root.
При желании вы также можете запретить другим пользователям запускать файлы с помощью chgrp some_group gogui.sh; chmod o-x gogui.sh
, который сделает файл исполняемым только для членов some_group
.
Когда вы устанавливаете пакет tk с помощью pacman, я считаю, что он должен быть доступен как для python3, так и для python2 в Manjaro и Arch.
Попробуйте import Tkinter
в интерпретаторе python2 (С заглавной буквы «T» ).