crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> проблеммы с запуском приложения, cannot connect to X server
nikita
  опции профиля:
сообщение 13.12.2012, 8:54
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Всем привет!Помогите плиз разобраться с проблеммой : Пишу приложение которое создает файл в нужной мне директории. Собираю его СиМэйком и все прекрасно работает. Далее устанавливаю права доступа к директории в которой приложение создает файл (чтение\запись\запуск только для владельца) а у исполняемого файла(sr-survey) устанавливаю флаги привелегии UID и GID. Перегружаю машину под другим пользователем и запускаю консольный вариант данной программы - все работает отлично (в указанной директории создается файл, хотя пользователь даже просмотреть содержимое каталога не может), а вот при запуске оконного варианта в терминал выскакивает ошибка :
sr-survey : cannot connect to X server : 1.0

Что это за ошибка и как все таки запустить это оконное приложение?

P.S.: Пишу под Debian, C++, QT4
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 13.12.2012, 9:14
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


http://stackoverflow.com/questions/646930/...-qt-application
скорее всего, у юзера нет прав на запуск графических приложений.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 13.12.2012, 11:46
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 13.12.2012, 9:14) *
скорее всего, у юзера нет прав на запуск графических приложений.


В том то и дело, что другие графические приложения запускаются без проблемм. Пытался менять юзеров местами - не помогло(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 13.12.2012, 13:32
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


попробуй запустить
Цитата
xhost +localhost

это разрешит вызов графики из консоли. в общем, более детально надо читать маны на xhost.
и ещё DISPLAY должен быть определён для юзера.
вроде
Цитата
env DISPLAY=:0.0 some_program

или в bash профайле для этого юзера, чтобы сразу при старте консоли работало.

Сообщение отредактировал Iron Bug - 13.12.2012, 13:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iReset
  опции профиля:
сообщение 13.12.2012, 15:33
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 178
Регистрация: 6.6.2012
Пользователь №: 3414

Спасибо сказали: 23 раз(а)




Репутация:   2  


Цитата(Iron Bug @ 13.12.2012, 14:32) *
попробуй запустить
Цитата
xhost +localhost
это разрешит вызов графики из консоли. в общем, более детально надо читать маны на xhost.
Это разрешит выдачу графики в данный сеанс всем, у кого X-клиент запущен на этой машине (lovalhost).

Цитата(Iron Bug @ 13.12.2012, 14:32) *
и ещё DISPLAY должен быть определён для юзера.
вроде
Цитата
env DISPLAY=:0.0 some_program

или в bash профайле для этого юзера, чтобы сразу при старте консоли работало.

Ну если запуск этой программы производится уже в иксах, то DISPLAY указывать не нужно.

А вся проблема, действительно, в том, что по умолчанию X-сервер настроен таким образом, что от кого попало запрос на отображение не примет - только от текущего пользователя. А поскольку программа принадлежит другому пользователю, а суидный бит говорит, что её надо запускать с правами владельца, то она и запускается с правами того пользователя. Соответственно, ей нет доступа на твой дисплей. Это стандартное ограничение, и сама программа в этом не виновата. Просто администратор (в данном случае ты, nikita) сказал запускаться ей от определённого пользователя. А тот пользователь, что запускает программу, может либо разрешить ей выдаваться на свой экран, либо нет.
Чтобы обойти это ограничение, можно попробовать поиграться с идентификаторами процесса через функцию setuid().
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 13.12.2012, 16:53
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


короче говоря, под дебианом (вот только что дома проверила) надо писать
xhost local:user_name
где user_name - юзер, от которого запускается программа, а запускать эту команду надо от юзера, который открыл графическую сессию (локальный юзер).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
nikita
  опции профиля:
сообщение 14.12.2012, 9:19
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 34
Регистрация: 19.10.2012
Пользователь №: 3570

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 13.12.2012, 16:53) *
короче говоря, под дебианом (вот только что дома проверила) надо писать
xhost local:user_name
где user_name - юзер, от которого запускается программа, а запускать эту команду надо от юзера, который открыл графическую сессию (локальный юзер).


Огромное спасибо! Все прекрасно заработало)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 11:12