Я изменил свой etc / fstab так, чтобы он смонтировал сетевой ресурс следующим образом:
//WDMyCloud/Story_1_5Tb_2 /home/plex/story cifs _netdev,guest,uid=plex,gid=mediaserver,rw,iocharset=utf8,file_mode=0770,dir_mode=0770 0 0
В частности, я добавил следующие строки в строку:
,iocharset=utf8,file_mode=0770,dir_mode=0770,
3] Это дало полные права на чтение, запись и выполнение сетевого ресурса членам группы «uid = mediaserver». «Uid = plex» уже имел такое разрешение даже до модификаций; Я решил не предоставлять разрешение на «o» всех пользователей. Теперь, если я ls -l папку, в которую я установил мою СТРОЙ, я получаю:
drwxrwx--- 2 plex mediaserver 0 Mar 3 09:53 story
Следовательно,
Теперь, когда я вижу, что делают эти параметры («абсолютные» значения идентичны chmod, что делает все это довольно понятно), я не понимаю, почему то, что я делал раньше (установка uid и gid), было недостаточно / правильно, и я не понимаю, почему выполнение chmod с привилегиями sudo не помогло бы решить эту проблему. На самом деле сходство этой опции с chmode делает ее похожей на какой-то chmod, выполненный на mount, поэтому почему chmod, выполненный позже, не решает?
Ваш код кажется слишком сложным во многих отношениях. Несколько очевидных вещей:
Вы можете просто использовать Gtk.Menu, вы не создаете меню с помощью ряда кнопок. Не используйте кнопку переключения для вызова апплета, нормальная кнопка - это то, что вам нужно. Если вы используете EventBox, вам совсем не нужна кнопка. Достаточно импортировать subprocess только один раз во главе апплетаВозможно, было бы лучше показать пример того, как это может быть
#!/usr/bin/env python3
import subprocess
import gi.repository
gi.require_version('Budgie', '1.0')
from gi.repository import Budgie, GObject, Gtk
class SomeApp(GObject.GObject, Budgie.Plugin):
__gtype_name__ = "SomeApp"
def __int__(self):
GObject.Object.__init__(self)
def do_get_panel_widget(self, uuid):
return SomeAppApplet(uuid)
class SomeAppApplet(Budgie.Applet):
manager = None
def __init__(self, uuid):
Budgie.Applet.__init__(self)
self.box = Gtk.EventBox()
self.add(self.box)
img = Gtk.Image.new_from_icon_name("firefox", Gtk.IconSize.MENU)
self.box.add(img)
self.menu = Gtk.Menu()
self.create_menu()
self.box.show_all()
self.show_all()
def run_command(self, menuitem):
print(menuitem)
subprocess.Popen(["gedit"])
def create_menu(self):
item1 = Gtk.MenuItem('Some item')
item1.connect("activate", self.run_command)
item2 = Gtk.MenuItem('Another item')
item3 = Gtk.MenuItem('I am on a roll, yet another item')
for item in [item1, item2, item3]:
self.menu.append(item)
self.menu.show_all()
self.box.connect("button-press-event", self.popup_menu)
def popup_menu(self, *args):
self.menu.popup(
None, None, None, None, 0, Gtk.get_current_event_time()
)
И файл .plugin (SomeApp.plugin:
[Plugin]
Loader=python3
Module=someapp
Name=Some App
Description=Obviously an App
Authors=James Bond
Copyright=Copyright © 2018 007
Website=some_website
Icon=firefox
При создании меню вы можете добавьте элементы меню в список в сочетании с командами, которые вы хотите запустить. Таким образом, вам не нужно использовать отдельные функции для каждой команды, но просто запустите команду в качестве аргумента для запуска run_command(). 13]
Ваш код кажется слишком сложным во многих отношениях. Несколько очевидных вещей:
Вы можете просто использовать Gtk.Menu, вы не создаете меню с помощью ряда кнопок. Не используйте кнопку переключения для вызова апплета, нормальная кнопка - это то, что вам нужно. Если вы используете EventBox, вам совсем не нужна кнопка. Достаточно импортировать subprocess только один раз во главе апплетаВозможно, было бы лучше показать пример того, как это может быть
#!/usr/bin/env python3
import subprocess
import gi.repository
gi.require_version('Budgie', '1.0')
from gi.repository import Budgie, GObject, Gtk
class SomeApp(GObject.GObject, Budgie.Plugin):
__gtype_name__ = "SomeApp"
def __int__(self):
GObject.Object.__init__(self)
def do_get_panel_widget(self, uuid):
return SomeAppApplet(uuid)
class SomeAppApplet(Budgie.Applet):
manager = None
def __init__(self, uuid):
Budgie.Applet.__init__(self)
self.box = Gtk.EventBox()
self.add(self.box)
img = Gtk.Image.new_from_icon_name("firefox", Gtk.IconSize.MENU)
self.box.add(img)
self.menu = Gtk.Menu()
self.create_menu()
self.box.show_all()
self.show_all()
def run_command(self, menuitem):
print(menuitem)
subprocess.Popen(["gedit"])
def create_menu(self):
item1 = Gtk.MenuItem('Some item')
item1.connect("activate", self.run_command)
item2 = Gtk.MenuItem('Another item')
item3 = Gtk.MenuItem('I am on a roll, yet another item')
for item in [item1, item2, item3]:
self.menu.append(item)
self.menu.show_all()
self.box.connect("button-press-event", self.popup_menu)
def popup_menu(self, *args):
self.menu.popup(
None, None, None, None, 0, Gtk.get_current_event_time()
)
И файл .plugin (SomeApp.plugin:
[Plugin]
Loader=python3
Module=someapp
Name=Some App
Description=Obviously an App
Authors=James Bond
Copyright=Copyright © 2018 007
Website=some_website
Icon=firefox
При создании меню вы можете добавьте элементы меню в список в сочетании с командами, которые вы хотите запустить. Таким образом, вам не нужно использовать отдельные функции для каждой команды, но просто запустите команду в качестве аргумента для запуска run_command().
Ваш код кажется слишком сложным во многих отношениях. Несколько очевидных вещей:
Вы можете просто использовать Gtk.Menu, вы не создаете меню с помощью ряда кнопок. Не используйте кнопку переключения для вызова апплета, нормальная кнопка - это то, что вам нужно. Если вы используете EventBox, вам совсем не нужна кнопка. Достаточно импортировать subprocess только один раз во главе апплетаВозможно, было бы лучше показать пример того, как это может быть
#!/usr/bin/env python3
import subprocess
import gi.repository
gi.require_version('Budgie', '1.0')
from gi.repository import Budgie, GObject, Gtk
class SomeApp(GObject.GObject, Budgie.Plugin):
__gtype_name__ = "SomeApp"
def __int__(self):
GObject.Object.__init__(self)
def do_get_panel_widget(self, uuid):
return SomeAppApplet(uuid)
class SomeAppApplet(Budgie.Applet):
manager = None
def __init__(self, uuid):
Budgie.Applet.__init__(self)
self.box = Gtk.EventBox()
self.add(self.box)
img = Gtk.Image.new_from_icon_name("firefox", Gtk.IconSize.MENU)
self.box.add(img)
self.menu = Gtk.Menu()
self.create_menu()
self.box.show_all()
self.show_all()
def run_command(self, menuitem):
print(menuitem)
subprocess.Popen(["gedit"])
def create_menu(self):
item1 = Gtk.MenuItem('Some item')
item1.connect("activate", self.run_command)
item2 = Gtk.MenuItem('Another item')
item3 = Gtk.MenuItem('I am on a roll, yet another item')
for item in [item1, item2, item3]:
self.menu.append(item)
self.menu.show_all()
self.box.connect("button-press-event", self.popup_menu)
def popup_menu(self, *args):
self.menu.popup(
None, None, None, None, 0, Gtk.get_current_event_time()
)
И файл .plugin (SomeApp.plugin:
[Plugin]
Loader=python3
Module=someapp
Name=Some App
Description=Obviously an App
Authors=James Bond
Copyright=Copyright © 2018 007
Website=some_website
Icon=firefox
При создании меню вы можете добавьте элементы меню в список в сочетании с командами, которые вы хотите запустить. Таким образом, вам не нужно использовать отдельные функции для каждой команды, но просто запустите команду в качестве аргумента для запуска run_command().