'프로그램 사용/wayland'에 해당되는 글 38건

  1. 2022.06.29 weston drm debug
  2. 2022.06.27 libwayland debug 메시지
  3. 2022.06.27 libwayland
  4. 2022.06.08 weston desktop-shell output destory
  5. 2022.03.18 weston debug message
  6. 2022.03.17 weston drm atomic
  7. 2022.02.17 wayvnc 실행 실패
  8. 2022.02.16 wayland-scanner
  9. 2022.02.07 wayland wl_fixed_t 변수
  10. 2022.01.24 wayvnc
프로그램 사용/wayland2022. 6. 29. 18:02

 

# echo 0x3 > /sys/module/drm/parameters/debug

[링크 : https://lynxbee.com/how-to-enable-drm-driver-debug-logging-in-linux/#.YrwTKHZBxhE]

 

dmesg 에서 확인이 가능한데.. 0x3 만 해도 dmesg를 넘기는지 금세 라인수 초과..

[28951.482225] [drm:drm_ioctl] comm="weston" pid=1707, dev=0xe201, auth=1, DRM_IOCTL_GET_MAGIC
[28951.482235] [drm:drm_getmagic] 1
[28951.482244] [drm:drm_ioctl] comm="weston" pid=1707, dev=0xe201, auth=1, DRM_IOCTL_AUTH_MAGIC
[28951.482250] [drm:drm_authmagic] 1
[28951.482255] [drm:drm_ioctl] comm="weston", pid=1707, ret=-22
[28951.482263] [drm:drm_ioctl] comm="weston" pid=1707, dev=0xe201, auth=1, DRM_IOCTL_SET_MASTER
[28951.482281] [drm:drm_ioctl] comm="weston" pid=1707, dev=0xe201, auth=1, DRM_IOCTL_MODE_ATOMIC
[28951.482300] [drm:drm_mode_object_get] OBJ ID: 44 (2)
[28951.482308] [drm:drm_mode_object_get] OBJ ID: 46 (2)
[28951.482316] [drm:drm_mode_object_get] OBJ ID: 45 (3)
[28951.482320] [drm:drm_mode_object_put.part.0] OBJ ID: 44 (3)
[28951.482325] [drm:drm_mode_object_put.part.0] OBJ ID: 45 (4)
[28951.482329] [drm:drm_mode_object_put.part.0] OBJ ID: 45 (3)
[28951.482339] [drm:drm_mode_object_put.part.0] OBJ ID: 46 (5)
[28951.482344] [drm:drm_mode_object_put.part.0] OBJ ID: 46 (4)
[28951.482354] [drm:drm_mode_object_get] OBJ ID: 39 (4)
[28951.482358] [drm:drm_mode_object_get] OBJ ID: 39 (5)
[28951.482363] [drm:drm_mode_object_put.part.0] OBJ ID: 39 (6)
[28951.482425] imx-drm display-subsystem: [drm:drm_calc_timestamping_constants] crtc 33: hwmode: htotal 1344, vtotal 806, vdisplay 768
[28951.482433] imx-drm display-subsystem: [drm:drm_calc_timestamping_constants] crtc 33: clock 65000 kHz framedur 16665600 linedur 20676
[28951.485362] imx-drm display-subsystem: [drm:drm_handle_vblank] vblank event on 396086, current 396086
[28951.485368] [drm:drm_mode_object_put.part.0] OBJ ID: 40 (4)
[28951.485379] [drm:drm_mode_object_put.part.0] OBJ ID: 40 (3)
[28951.485385] [drm:drm_mode_object_put.part.0] OBJ ID: 49 (3)
[28951.485394] [drm:drm_mode_object_put.part.0] OBJ ID: 43 (2)

'프로그램 사용 > wayland' 카테고리의 다른 글

capture drm screen  (0) 2022.08.08
weston redraw 취소하기  (0) 2022.07.07
libwayland debug 메시지  (0) 2022.06.27
libwayland  (0) 2022.06.27
weston desktop-shell output destory  (0) 2022.06.08
Posted by 구차니
프로그램 사용/wayland2022. 6. 27. 17:24

export WAYLAND_DEBUG=1 하면 libwayland*.so 들의 디버그 메시지가 출력되는데

대~~~애충 아래와 같은 포맷

[1492172.627] wl_surface@17.leave(wl_output@16)
[1492172.707]  -> wl_surface@17.set_buffer_scale(1)
[1492172.745]  -> wl_surface@17.frame(new id wl_callback@27)
[1492192.837]  -> wl_surface@17.attach(wl_buffer@26, 0, 0)
[1492192.934]  -> wl_surface@17.damage(0, 0, 806, 606)
[1492192.973]  -> wl_surface@17.commit()
[1492208.877] wl_display@1.delete_id(27)
[1492208.938] wl_buffer@26.release()
[1492208.957] wl_callback@27.done(22885913)

 

send와 discard는 상위에서 보내주는 대로 설정되는거고, 해당 내용에 따라 출력이 되는 듯.

@00 식으로 나오는건 인자에 따라 출력되는 값인데.. 함수 인자가 어떤걸 의미하는진 따로 찾아봐야 할 듯..

void wl_closure_print(struct wl_closure *closure, struct wl_object *target,
 int send, int discarded, uint32_t (*n_parse)(union wl_argument *arg))
{
// ...
fprintf(f, "[%7u.%03u] %s%s%s@%u.%s(",
time / 1000, time % 1000,
discarded ? "discarded " : "",
send ? " -> " : "",
target->interface->name, target->id,
closure->message->name);

[링크 : https://gitlab.freedesktop.org/wayland/wayland/-/blob/main/src/connection.c#L1286]

[링크 : https://gitlab.freedesktop.org/wayland/wayland]

'프로그램 사용 > wayland' 카테고리의 다른 글

weston redraw 취소하기  (0) 2022.07.07
weston drm debug  (0) 2022.06.29
libwayland  (0) 2022.06.27
weston desktop-shell output destory  (0) 2022.06.08
weston debug message  (0) 2022.03.18
Posted by 구차니
프로그램 사용/wayland2022. 6. 27. 17:07

도대체.. 넌 또 머냐 -_-

 

[링크 : https://gitlab.freedesktop.org/wayland/wayland]

 

wayland_debug 라고 했듯.. libwayland의  디버깅이지 weston의 디버깅이 아니었나..

To get the logs of the wayland protocol messages, set this environment variable:

 export WAYLAND_DEBUG=1

[링크 : https://wiki.st.com/stm32mpu/wiki/How_to_debug_Weston]

'프로그램 사용 > wayland' 카테고리의 다른 글

weston drm debug  (0) 2022.06.29
libwayland debug 메시지  (0) 2022.06.27
weston desktop-shell output destory  (0) 2022.06.08
weston debug message  (0) 2022.03.18
weston drm atomic  (0) 2022.03.17
Posted by 구차니

drm 에서 HDMI hotplug를 아래 코드에서 처리하는데 shell로 어떻게 넘겨주는진 발견하지 못했다.

static int
udev_drm_event(int fd, uint32_t mask, void *data)
{
struct drm_backend *b = data;
struct udev_device *event;
uint32_t conn_id, prop_id;

event = udev_monitor_receive_device(b->udev_monitor);

if (udev_event_is_hotplug(b, event)) {
if (udev_event_is_conn_prop_change(b, event, &conn_id, &prop_id))
drm_backend_update_conn_props(b, conn_id, prop_id);
else
drm_backend_update_heads(b, event);
}

udev_device_unref(event);

return 1;
}

static void
drm_backend_update_heads(struct drm_backend *b, struct udev_device *drm_device)
{
/* collect new connectors that have appeared, e.g. MST */
for (i = 0; i < resources->count_connectors; i++) {
uint32_t connector_id = resources->connectors[i];

head = drm_head_find_by_connector(b, connector_id);
if (head) {
drm_head_update_info(head);
} else {
head = drm_head_create(b, connector_id, drm_device);
if (!head)
weston_log("DRM: failed to create head for hot-added connector %d.\n",
   connector_id);
}
}
}

static void
drm_head_update_info(struct drm_head *head)
{
drmModeConnector *connector;

connector = drmModeGetConnector(head->backend->drm.fd,
head->connector_id);
if (!connector) {
weston_log("DRM: getting connector info for '%s' failed.\n",
   head->base.name);
return;
}

if (drm_head_assign_connector_info(head, connector) < 0)
drmModeFreeConnector(connector);

if (head->base.device_changed)
drm_head_log_info(head, "updated");
}

static void
drm_head_log_info(struct drm_head *head, const char *msg)
{
if (head->base.connected) {
weston_log("DRM: head '%s' %s, connector %d is connected, "
   "EDID make '%s', model '%s', serial '%s'\n",
   head->base.name, msg, head->connector_id,
   head->base.make, head->base.model,
   head->base.serial_number ?: "");
} else {
weston_log("DRM: head '%s' %s, connector %d is disconnected.\n",
   head->base.name, msg, head->connector_id);
}
}

 

다만.. 아래의 코드에서 등록되어 output이 파괴될때 트리거 되어 작동하는 녀석만 발견함.

static void
handle_output_destroy(struct wl_listener *listener, void *data);

static void
create_shell_output(struct desktop_shell *shell,
struct weston_output *output)
{
struct shell_output *shell_output;

shell_output = zalloc(sizeof *shell_output);
if (shell_output == NULL)
return;

shell_output->output = output;
shell_output->shell = shell;
shell_output->destroy_listener.notify = handle_output_destroy;
wl_signal_add(&output->destroy_signal,
      &shell_output->destroy_listener);
wl_list_insert(shell->output_list.prev, &shell_output->link);

if (wl_list_length(&shell->output_list) == 1)
shell_for_each_layer(shell,
     shell_output_changed_move_layer, NULL);
}

static void
handle_output_create(struct wl_listener *listener, void *data)
{
struct desktop_shell *shell =
container_of(listener, struct desktop_shell, output_create_listener);
struct weston_output *output = (struct weston_output *)data;

create_shell_output(shell, output);
}


static void
setup_output_destroy_handler(struct weston_compositor *ec,
struct desktop_shell *shell)
{
struct weston_output *output;

wl_list_init(&shell->output_list);
wl_list_for_each(output, &ec->output_list, link)
create_shell_output(shell, output);

shell->output_create_listener.notify = handle_output_create;
wl_signal_add(&ec->output_created_signal,
&shell->output_create_listener);

shell->output_move_listener.notify = handle_output_move;
wl_signal_add(&ec->output_moved_signal, &shell->output_move_listener);
}

WL_EXPORT int
wet_shell_init(struct weston_compositor *ec,
       int *argc, char *argv[])
{
setup_output_destroy_handler(ec, shell);
}

'프로그램 사용 > wayland' 카테고리의 다른 글

libwayland debug 메시지  (0) 2022.06.27
libwayland  (0) 2022.06.27
weston debug message  (0) 2022.03.18
weston drm atomic  (0) 2022.03.17
wayvnc 실행 실패  (0) 2022.02.17
Posted by 구차니
프로그램 사용/wayland2022. 3. 18. 11:35

해당 명령을 입력한 콘솔로 출력된다. (시리얼, ssh 에서 각각 해 봄)

 

export WAYLAND_DEBUG=1

[링크 : https://wiki.st.com/stm32mpu/wiki/How_to_debug_Weston]

'프로그램 사용 > wayland' 카테고리의 다른 글

libwayland  (0) 2022.06.27
weston desktop-shell output destory  (0) 2022.06.08
weston drm atomic  (0) 2022.03.17
wayvnc 실행 실패  (0) 2022.02.17
wayland-scanner  (0) 2022.02.16
Posted by 구차니
프로그램 사용/wayland2022. 3. 17. 16:39

테스트 중 아래와 같은 에러가 보여서 atomic이 먼가 찾아보는데..

[11:49:06.216] atomic: couldn't commit new state: Invalid argument
[11:49:06.217] repaint-flush failed: Invalid argument

 

말그대로.. 데이터의 atomic이 깨졌다는 건가..

At the other end there's struct drm_plane, representing a scanout engine that reads pixel data from memory represented by a struct drm_framebuffer and provides it to the display hardware.

[링크 : https://lwn.net/Articles/653071/]

 

backend-drm/kms.c 에서 해당 에러를 출력한다.

'프로그램 사용 > wayland' 카테고리의 다른 글

weston desktop-shell output destory  (0) 2022.06.08
weston debug message  (0) 2022.03.18
wayvnc 실행 실패  (0) 2022.02.17
wayland-scanner  (0) 2022.02.16
wayland wl_fixed_t 변수  (0) 2022.02.07
Posted by 구차니
프로그램 사용/wayland2022. 2. 17. 12:04

weston 에서 억지로 빌드해서 돌렸더니 에러 똬닥!

# ./wayvnc
wl_registry@2: error 0: invalid version for global zxdg_output_manager_v1 (4): have 2, wanted 3
ERROR: Virtual Pointer protocol not supported by compositor.
ERROR: Failed to initialise wayland

 

이제 보니.. wlroots 기반의 wayland compositor에서 돌아가는 녀석이었군..

About
A VNC server for wlroots based Wayland compositors

[링크 : https://github.com/any1/wayvnc]

 

freedesktop.org 에서 관리하는 녀석

[링크 : https://gitlab.freedesktop.org/wlroots/wlroots/]

[링크 : https://github.com/swaywm/wlroots]

'프로그램 사용 > wayland' 카테고리의 다른 글

weston debug message  (0) 2022.03.18
weston drm atomic  (0) 2022.03.17
wayland-scanner  (0) 2022.02.16
wayland wl_fixed_t 변수  (0) 2022.02.07
wayvnc  (0) 2022.01.24
Posted by 구차니
프로그램 사용/wayland2022. 2. 16. 14:09

동일 이름의 xml 파일은 보이는데 헤더나 소스가 없어서

build 관련 스크립트를 뒤져보다 보니 빙고

./wayvnc/build/build.ninja:205:build protocols/libclient_protos.a.p/wlr-virtual-pointer-unstable-v1.h: CUSTOM_COMMAND ../protocols/wlr-virtual-pointer-unstable-v1.xml | /opt/toolchain/usr/bin/wayland-scanner

 

This tool is used to generate C headers & glue code from the Wayland protocol XML files discussed in chapter 2.3

[링크 : https://wayland-book.com/libwayland/wayland-scanner.html]

[링크 : https://makersweb.net/linux/18842]

'프로그램 사용 > wayland' 카테고리의 다른 글

weston drm atomic  (0) 2022.03.17
wayvnc 실행 실패  (0) 2022.02.17
wayland wl_fixed_t 변수  (0) 2022.02.07
wayvnc  (0) 2022.01.24
weston client 메모리 누수  (0) 2022.01.17
Posted by 구차니

23bit 비트의 정수고 8bit의 십진수 정확도 라고 하니 먼가 감이 안오는데

 

0 ~ 8388608(2^23) 범위를

0  ~ 32768 로 사용한다는 것. (그럼 이론상 FHD 17*17개 UHD 8*8 까지 가능하려나)

 

정확도는 어떤 의미로 쓰려나.. 나중에 확대했을때를 대비해서 소수점 포인트를 주는건가?

 

/**
 * Fixed-point number
 *
 * A `wl_fixed_t` is a 24.8 signed fixed-point number with a sign bit, 23 bits
 * of integer precision and 8 bits of decimal precision. Consider `wl_fixed_t`
 * as an opaque struct with methods that facilitate conversion to and from
 * `double` and `int` types.
 */
typedef int32_t wl_fixed_t;

[링크 : https://code.woboq.org/qt5/include/wayland-util.h.html]

 

typedef int32_t wl_fixed_t;

static inline int wl_fixed_to_int(wl_fixed_t f)
{
    return f / 256;
}

static inline wl_fixed_t wl_fixed_from_int(int i)
{
    return i * 256;
}

[링크 : https://github.com/nobled/wayland/blob/master/src/wayland-util.h]

'프로그램 사용 > wayland' 카테고리의 다른 글

wayvnc 실행 실패  (0) 2022.02.17
wayland-scanner  (0) 2022.02.16
wayvnc  (0) 2022.01.24
weston client 메모리 누수  (0) 2022.01.17
wayland buffer  (0) 2022.01.13
Posted by 구차니
프로그램 사용/wayland2022. 1. 24. 16:55

아놔.. rdp랑 동일하네.. wayland 자체가 현재 사용중인 세션은 어떻게든 끌어갈 수 없는 구조인가?

This is a VNC server for wlroots-based Wayland compositors (⛔ Gnome and KDE are not supported). It attaches to a running Wayland session, creates virtual input devices, and exposes a single display via the RFB protocol. The Wayland session may be a headless one, so it is also possible to run wayvnc without a physical display attached.

[링크 : https://github.com/any1/wayvnc]

 

As of 2020, there are several projects that use these methods to provide GUI access to remote computers. The compositor Weston provides an RDP backend. GNOME has a remote desktop server that supports VNC. WayVNC is a VNC server that works with compositors, like Sway, based on the wlroots library. Waypipe works with all Wayland compositors and offers almost-transparent application forwarding, like ssh -X.

[링크 : https://wayland.freedesktop.org/faq.html]

 

느리긴 해도 라즈베리 파이 3 에서도 돌아가긴 한다는 건가?

New features since v0.1.2:
  • The OpenGL ES 2.0 based renderer has now been replaced with a pixman based
    renderer. The new renderer is both simpler and performs better on devices
    with poor memory bandwidth such as the Raspberry Pi 3.

[링크 : https://github.com/any1/wayvnc/releases]

[링크 : https://github.com/any1/neatvnc#client-compatibility]

'프로그램 사용 > wayland' 카테고리의 다른 글

wayland-scanner  (0) 2022.02.16
wayland wl_fixed_t 변수  (0) 2022.02.07
weston client 메모리 누수  (0) 2022.01.17
wayland buffer  (0) 2022.01.13
wayland client example  (0) 2022.01.06
Posted by 구차니