После установки программного обеспечения для кастинга экрана kazam оно не запускается.
Я использую Ubuntu 17.04.
/usr/bin/kazam:32: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
from gi.repository import Gtk
/usr/lib/python3/dist-packages/kazam/frontend/window_area.py:30: PyGIWarning: Wnck was imported without specifying a version first. Use gi.require_version('Wnck', '3.0') before import to ensure that the right version gets loaded.
from gi.repository import Gtk, GObject, Gdk, Wnck, GdkX11
/usr/lib/python3/dist-packages/kazam/backend/gstreamer.py:35: PyGIWarning: Gst was imported without specifying a version first. Use gi.require_version('Gst', '1.0') before import to ensure that the right version gets loaded.
from gi.repository import GObject, Gst
/usr/lib/python3/dist-packages/kazam/frontend/indicator.py:148: PyGIWarning: AppIndicator3 was imported without specifying a version first. Use gi.require_version('AppIndicator3', '0.1') before import to ensure that the right version gets loaded.
from gi.repository import AppIndicator3
/usr/lib/python3/dist-packages/kazam/frontend/indicator.py:97: PyGIWarning: Keybinder was imported without specifying a version first. Use gi.require_version('Keybinder', '3.0') before import to ensure that the right version gets loaded.
from gi.repository import Keybinder
Segmentation fault (core dumped)
Решено: мне просто нужно было установить python3-xlib:
sudo apt-get update
sudo apt-get install python3-xlib
Проблема с этой ошибкой сегментации заключается в привязках горячих клавиш Kazam. Возможно, система не может дать некоторые ключи Казаму, поэтому мы получаем исключение.
Грубое решение состоит в том, чтобы удалить глобальные настройки Kazam:
Откройте файл:
/usr/lib/python3/dist-packages/kazam/frontend/indicator.py
Найдите эти строки (примерно в строке 100 или около того):
Keybinder.bind("<Super><Ctrl>R", self.cb_hotkeys, "start-request")
Keybinder.bind("<Super><Ctrl>F", self.cb_hotkeys, "stop-request")
Keybinder.bind("<Super><Ctrl>P", self.cb_hotkeys, "pause-request")
Keybinder.bind("<Super><Ctrl>W", self.cb_hotkeys, "show-request")
Keybinder.bind("<Super><Ctrl>Q", self.cb_hotkeys, "quit-request")
Закомментируйте их:
#Keybinder.bind("<Super><Ctrl>R", self.cb_hotkeys, "start-request")
#Keybinder.bind("<Super><Ctrl>F", self.cb_hotkeys, "stop-request")
#Keybinder.bind("<Super><Ctrl>P", self.cb_hotkeys, "pause-request")
#Keybinder.bind("<Super><Ctrl>W", self.cb_hotkeys, "show-request")
#Keybinder.bind("<Super><Ctrl>Q", self.cb_hotkeys, "quit-request")
Сохраните файл.
Run Kazam.
Вы великолепны.
После этого вы не можете использовать эти горячие клавиши, но, по крайней мере, Kazam будет работать.
Простая установка python3-xlib
решила вашу конкретную проблему Segmentation Fault с Kazam, но вы, возможно, заметили, что по-прежнему есть несколько предупреждений PyGI об импорте «без предварительного указания версии» .
Поскольку этот вопрос является вопросом № 1 в Google по таким предупреждениям (вот как я здесь наткнулся), вот как изменить код, чтобы предотвратить такие предупреждения, как описано в самих предупреждениях.
Вместо:
from gi.repository import Gtk, GObject, Gdk, Wnck, GdkX11, Gst, AppIndicator3
Что выдает несколько предупреждений:
__main__:1: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
__main__:1: PyGIWarning: Wnck was imported without specifying a version first. Use gi.require_version('Wnck', '3.0') before import to ensure that the right version gets loaded.
__main__:1: PyGIWarning: Gst was imported without specifying a version first. Use gi.require_version('Gst', '1.0') before import to ensure that the right version gets loaded.
__main__:1: PyGIWarning: AppIndicator3 was imported without specifying a version first. Use gi.require_version('AppIndicator3', '0.1') before import to ensure that the right version gets loaded.
Используйте это, согласно официальной PyGOobject Documentation:
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
gi.require_version('Gst', '1.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, GObject, Gdk, Wnck, GdkX11, Gst, AppIndicator3
Очевидно, что не все подмодули gi
требуют указания версия.
Или в качестве альтернативы вы можете запросить все версии в одном выражении, используя функцию require_versions()
(обратите внимание на множественное число), которая принимает один словарь модулей и их соответствующих версий:
import gi
gi.require_versions({
'Gtk': '3.0',
'Wnck': '3.0',
'Gst': '1.0',
'AppIndicator3': '0.1',
})
from gi.repository import Gtk, GObject, Gdk, Wnck, GdkX11, Gst, AppIndicator3
Эта функция не указан в официальных документах, но был добавлен в PyGObject 3.21.0, выпущенном в 2016 году.
В Ubuntu 20.04 мне больше повезло с форком GitHub. Вот шаги:
sudo ppa-purge ppa: sylvain-pineau/kazam
sudo apt remove kazam
sudo apt install python3-cairo python3-xlib python3-distutils-extra
(зависимости)sudo python3 setup.py install
По умолчанию это устанавливается в /usr/local/bin/kazam
, который уже должен быть в вашей PATH.
У меня этот местный казам тоже появился как лаунчер с иконками. Однако они могут остаться из пакета Ubuntu или из приведенного выше PPA.
Если у вас возникла проблема с выбором микрофона, используйте эту команду после установки (используя соответствующую версию Python):
sudo sed -i 's/time.clock/time.perf_counter/ g 'python3.8/dist-packages/kazam/pulseaudio/pulseaudio.py