Bug 18911

Summary: Hyprland: починить курсоры в xwayland
Product: Ximper Linux Reporter: Кирилл Уницаев <fiersik>
Component: ОбщееAssignee: Кирилл Уницаев <fiersik>
Status: CLOSED FIXED QA Contact: Кирилл Уницаев <fiersik>
Severity: minor    
Priority: P4    
Version: не указана   
Target Milestone: ---   
Hardware: Other   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 18855    

Description Кирилл Уницаев 2026-02-23 03:30:24 MSK
В hyprland для курсоров используют свой формат - hyprcursor, он не работает в XWayland, поэтому во многих программах неправильно отображается курсор.

Я дополнительно указываю тему и для xcursor, но почему-то это тоже сломалось и курсор не отображается.

Нужно починить отображение курсора в XWayland
Comment 1 Кирилл Уницаев 2026-03-02 22:05:00 MSK
Долго пробовал ставить разные темы, проверяя, может проблема в неправильной теме, но нет

помогло создание файла ~/.icons/default/index.theme и указания туда темы, но я считаю, что это не решение проблемы.

Удалил файл - курсор пропал

Сделал небольшой скрипт для проверки:
import ctypes, ctypes.util

xlib = ctypes.CDLL(ctypes.util.find_library('X11'))
xcursor = ctypes.CDLL(ctypes.util.find_library('Xcursor'))

xlib.XOpenDisplay.restype = ctypes.c_void_p
xcursor.XcursorGetTheme.restype = ctypes.c_char_p
xcursor.XcursorGetTheme.argtypes = [ctypes.c_void_p]

dpy = xlib.XOpenDisplay(None)
if dpy:
    theme = xcursor.XcursorGetTheme(dpy)
    print(f'XcursorGetTheme: {theme}')

Возвращает XcursorGetTheme: b'rose-pine', значит приложение получает тему...

Тесты завели меня к xrdb
xrdb -query - пусто

Попробовал вручную вписать переменные:
printf 'Xcursor.theme: $xcursor_theme\nXcursor.size: $cursor_size\n' | xrdb -merge

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

Добавил это в системный конфиг:
$hyprcursor_theme = rose-pine-hyprcursor
$xcursor_theme = rose-pine
$cursor_size = 24

#---------- Hyprcursor
env = HYPRCURSOR_THEME, $hyprcursor_theme
env = HYPRCURSOR_SIZE, $cursor_size

#---------- XCursor
env = XCURSOR_THEME, $xcursor_theme
env = XCURSOR_SIZE, $cursor_size

exec = printf 'Xcursor.theme: $xcursor_theme\nXcursor.size: $cursor_size\n' | xrdb -merge


Теперь тема обновляется во всех местах при обновлении переменных.
Задачу считаю выполненной.
Comment 2 Кирилл Уницаев 2026-03-02 22:05:19 MSK
Сразу закрываю