LINUX.ORG.RU

Не запускается caja, раунд II

 ,


0

1

У меня проблема - https://github.com/mate-desktop/caja/issues/1751

@Dimez стёр мою предыдущую тему:
https://www.linux.org.ru/forum/desktop/17428934

Я написал тест:

$ cat main.c

#include <stdio.h>
#include <gio/gio.h>

int main(int argc, char *argv[]) {
	GApplication *app;
	GError *error = NULL;
	
	// # warning: ‘G_APPLICATION_FLAGS_NONE’ is deprecated: Use 'G_APPLICATION_DEFAULT_FLAGS' instead [-Wdeprecated-declarations]
	app = g_application_new ("org.mate.caja", G_APPLICATION_DEFAULT_FLAGS);

	g_application_register (app, NULL, &error);
	
	if (error != NULL) {
	   g_printerr ("Could not register the application: %s\n", error->message);
	   g_error_free (error);
	}
	else
	{
	   g_print ("Success\n");
	}

	return 0;
}

$ cat Makefile.am

bin_PROGRAMS = my_caja
my_caja_SOURCES = main.c
AM_CPPFLAGS = $(GLIB_CFLAGS) $(GIO_CFLAGS)
AM_LDFLAGS = $(GLIB_LIBS) $(GIO_LIBS) 

$ cat configure.ac

AC_INIT([my_caja], [0.0.0])
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADERS([config.h])

# Check for GLIB
PKG_CHECK_MODULES([GLIB], [glib-2.0], [have_glib=yes], [have_glib=no])

AS_IF([test "x$have_glib" = "xyes"], [
  AC_DEFINE([HAVE_GLIB], [1], [Define to 1 if GLIB is available])
  AC_SUBST([GLIB_CFLAGS])
  AC_SUBST([GLIB_LIBS])
], [
  AC_MSG_ERROR([GLIB is required to compile this program])
])

# Check for GIO
PKG_CHECK_MODULES([GIO], [gio-2.0], [have_gio=yes], [have_gio=no])

AS_IF([test "x$have_gio" = "xyes"], [
   AC_DEFINE([HAVE_GIO], [1], [Define to 1 if GIO is available])
   AC_SUBST([GIO_CFLAGS])
   AC_SUBST([GIO_LIBS])
], [
   AC_MSG_ERROR([GIO is required to compile this program])
])

AM_INIT_AUTOMAKE([foreign])
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

$ autoreconf -fi && ./configure && make
$ ./my_caja

Success  

Что делать дальше?

★★★★

Последнее исправление: Shushundr (всего исправлений: 2)

А, да, ещё я пробовал пересобрать без USE=mate, пробовал собрать версию 1.26.3 - ничего не помогает.

Shushundr ★★★★
() автор топика

о, у них имя другое. org.mate.Caja - здесь Caja с большой буквы.
Тогда мой пример не работает так же, как и их программа:

$ ./my_caja
Failed to register: Timeout was reached

Если убить $ sudo killall caja, то она сразу снова появляется в списке процессов с другим номером:

$ ps -eax | grep caja | grep -v grep
  63779 tty2     Sl+    0:00 /usr/bin/caja SHELL=/bin/bash 

смотрел

journalctl -u dbus

там ничего нет.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от Shushundr

Перезапускает программу caja родительский процесс mate-session

$ ps -p 1862
    PID TTY          TIME CMD
   1862 tty2     00:00:00 mate-session

$ qfile /usr/bin/mate-session

mate-base/mate-session-manager: /usr/bin/mate-session

Но как именно происходит запуск - непонятно.

$ dconf dump /org/mate/ | grep -A 10 "\[caja"
[caja-sendto]
last-medium='folder-remote'

[caja/list-view]
default-column-order=['name', 'size', 'type', 'date_modified', 'owner', 'octal_permissions', 'group', 'date_accessed', 'where', 'Xattr::Tags', 'permissions', 'size_on_disk', 'extension', 'mime_type', 'date_created']
default-visible-columns=['name', 'size', 'type', 'date_modified']

[caja/preferences]
always-use-location-entry=true

[caja/window-state]
geometry='1456x1104+226+33'
maximized=false
side-pane-view='places'
sidebar-width=228
start-with-location-bar=true
start-with-sidebar=true
start-with-status-bar=true
start-with-toolbar=true

Для разнообразия ещё такая ошибка есть:
$ caja

Could not register the application: GDBus.Error:org.freedesktop.DBus.Error.NoReply: Message recipient disconnected from message bus without replying
Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 3)
Ответ на: комментарий от Shushundr

Остановить автоматический перезапуск caja можно, если отредактировать файл

/usr/share/applications/caja.desktop

сделать

X-MATE-AutoRestart=false
вместо X-MATE-AutoRestart=true

(и перезапустить сессию)

После этого caja не перезапускается, если её убить при помощи killall caja

Но мою проблему это не решает. Запустить caja я всё равно нормально не могу.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr
$ ldd /usr/bin/caja | grep glib
	libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f48e28ea000)
$ ldd /usr/bin/caja | grep gio
	libgio-2.0.so.0 => /usr/lib64/libgio-2.0.so.0 (0x00007f10b8d8e000)
Shushundr ★★★★
() автор топика

Великую суть DBus постичь не удалось - https://www.linux.org.ru/forum/talks/17430264

Причём не очень понятно, как библиотека libgio используется внутри dbus. Ведь она не линкуется к dbus-daemon, а только к какой-то из утилит - dbus-binding-tool «C language dbus-glib bindings generation utility.» Вероятно, dbus-daemon реализовывает протокол самостоятельно, без GObject, GLib и GIO.

A message bus daemon executable, built on libdbus library.

Как выяснить, из-за чего зависает первая копия caja, да так, что вторая не может до первой достучаться? Зачем вообще вторая копия обращается к первой, если для получения тайного знания её было бы достаточно получить информацию от dbus-daemon? Почему не подключаться к первой копии не помогают ключи командной строки? Ведь firefox же как-то умеет ключами игнорировать свои другие экземпляры.

Что же делать дальше?

Shushundr ★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.