Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clipboard not yet working in Windows11 wslg GUI #1658

Closed
atolismesh opened this issue Apr 29, 2023 · 73 comments
Closed

Clipboard not yet working in Windows11 wslg GUI #1658

atolismesh opened this issue Apr 29, 2023 · 73 comments

Comments

@atolismesh
Copy link
Contributor

Clipboard пока еще не работает под wslg в Windows 11 совместно с far2l GUI и Ubuntu 22.04.2.

Выделяем, копируем текст (Ctrl+Ins) в far2l GUI и пытаемся вставить его в любое приложение в Windows или другое приложение, запущенное под wsl. Ничего не происходит - текст не вставляется, либо вставляется текст который уже был в clipboard Windows.

Выделяем, копируем текст в Windows и пытаемся вставить его в far2l GUI. Текст вставляется.

Внутри far2l GUI все копируется/вставляется, но в других окнах wsl и Windows содержимое clipboard не меняется.
При этом в far2l GUI вставляется содержимое из Windows clipboard.
Т.е. работает в одну сторону.

При таком запуске far2l, как описано в #1350 ,

GDK_BACKEND=x11 far2l 

clipboard начинает работать в обе стороны, но визуально окна far2l выгладят, мягко говоря, плохо.

FAR2L, version 2.5.0-2661ab9f-beta Linux x86_64

libwxgtk3.0-gtk3-dev/jammy,now 3.0.5.1+dfsg-4 amd64

WSL version: 1.2.5.0
Kernel version: 5.15.90.1
WSLg version: 1.0.51
MSRDC version: 1.2.3770
Direct3D version: 1.608.2-61064218
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22621.1635

@unxed
Copy link
Contributor

unxed commented Apr 29, 2023

Стоит, наверное, скрин кинуть окна, которое "выглядит плохо"

@atolismesh
Copy link
Contributor Author

atolismesh commented Apr 29, 2023

Вид окна при запуске с GDK_BACKEND=x11 - белый рамки, кнопки в другом стиле :
image

Стандартный вид окна:
image

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

Если ктото расскажет как запустить wsl в десятке которая работает внутри виртуалбокса то шансы на скорый фикс всех wsl-related проблем сильно вырастут. Пока все выглядит так что это невозможно :( https://superuser.com/questions/1631558/unable-to-install-wsl-on-windows-10-running-inside-virtual-box

@unxed
Copy link
Contributor

unxed commented Apr 30, 2023

Спросил в чате, там человек 200, кто-нибудь знает, может.

@unxed
Copy link
Contributor

unxed commented Apr 30, 2023

А вот этот совет не работает? https://askubuntu.com/a/1320858/894968 Типа VMWare 16 вместо VirtualBox использовать. Там вроде простая версия на одну виртуалку — бесплатная.

@atolismesh
Copy link
Contributor Author

atolismesh commented Apr 30, 2023

По идее чек бокс в VirtualBox nested vt-x на закладке Processor,(или через командную строку ..... —nested-hw-virt on) должны сработать. Главное, чтобы CPU и BIOS поддерживали. и версия VirtualBox не ниже 6.1 вроде. Завтра проверю, где-то у меня был образ с Windows 11 + wsl2.
cat /proc/cpuinfo | grep -i vmx что выдает ?

@atolismesh
Copy link
Contributor Author

atolismesh commented Apr 30, 2023

MS has ready to use VM for VirtualBox https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
It includes W11, WSL2, Ubuntu installed for WSL2.
VM includes :
Windows 11 Enterprise edition build 22621.1555 (Moment 2 Update)
Visual Studio 2022 Community Edition with UWP, .NET Desktop, Azure, and Windows App SDK for C# workloads enabled
Windows Subsystem for Linux 2 enabled with Ubuntu installed
Windows Terminal installed
Developer mode enabled

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

чекбокс есть таск манагер говорит что виртуализация есть wsl не работает:
image
проблема как я понимаю в этом https://forums.virtualbox.org/viewtopic.php?t=101609
Спасибо, попробую скачать готовую виртуалку авось таки заработает..

@atolismesh
Copy link
Contributor Author

atolismesh commented Apr 30, 2023

Нее - "таск манагер говорит что виртуализация есть" .
Это другая виртуализация - vt-d. А для nested virtualization должна быть еще в BIOS включена vt-x (или vmx)

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

image

@atolismesh
Copy link
Contributor Author

cat /proc/cpuinfo | grep -i vmx

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

пустота

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

в биосе SVM CPU Virtualization - Enabled

@atolismesh
Copy link
Contributor Author

У меня cat /proc/cpuinfo | grep -i vmx так:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap avx512ifma clflushopt intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp hwp_pkg_req avx512vbmi umip pku ospke avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_bitalg avx512_vpopcntdq rdpid fsrm md_clear flush_l1d arch_capabilities
vmx flags : vnmi preemption_timer posted_intr invvpid ept_x_only ept_ad ept_1gb flexpriority apicv tsc_offset vtpr mtf vapic ept vpid unrestricted_guest vapic_reg vid ple pml ept_mode_based_exec tsc_scaling

@atolismesh
Copy link
Contributor Author

Технология vmx довольно старая - где-то должна включаться

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

У меня 'vmx flags:' вообще нету в /proc/cpuinfo :-/
это ноут может залочили както, в биосе вроде все перерыл ничего кроме уже включенного SVM CPU Virtualization интересного там нету

@atolismesh
Copy link
Contributor Author

atolismesh commented Apr 30, 2023

осталось надеятся, что образ с MS все-таки запустится.
Либо арендовать Azure VM и т.п. на денек, если есть такая возможность

@elfmz
Copy link
Owner

elfmz commented Apr 30, 2023

у меня под рукой еще есть комп на i7 3770 могу там еще попробоать)

@atolismesh
Copy link
Contributor Author

По идее там в процессоре должны быть доступны все эти VT-****

@elfmz
Copy link
Owner

elfmz commented May 1, 2023

ну штож, на старичке 3770 вроде все поднялось

@unxed
Copy link
Contributor

unxed commented May 1, 2023

О, класс! Ещё интересно, насколько комфортный UX в Windows Terminal с win32-input-mode и OSC52 в итоге получился. Вроде люди в чате норм пользуются, а я вот сам не пробовал пока.

@atolismesh
Copy link
Contributor Author

Супер!

@unxed
Copy link
Contributor

unxed commented May 1, 2023

@elfmz если прямо никак не получится завести clipboard под Wayland в WSLg, можно попробовать workaround отсюда:
#1520

cat | /mnt/c/Windows/System32/clip.exe
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe Get-Clipboard | sed 's/\r//'

@unxed
Copy link
Contributor

unxed commented May 1, 2023

#1350 (comment)

Вот эту проблемку тоже можно этим способом решить, наверное, кстати.

@i2van
Copy link

i2van commented May 2, 2023

Клипбоард перестал работать после обновления WSL (работал за 2 версии до того). Не работает копирование в обе стороны вообще. Windows 10 22H2 (10.0.19045.2846). Не работает и в vcxsrv.

@elfmz
Copy link
Owner

elfmz commented May 2, 2023

Ага, то есть то что оно у меня не работает вообще с самого начала экспериментов с wsl - это "норма"..

@unxed
Copy link
Contributor

unxed commented May 2, 2023

Вроде в соседнем тикете писали, что с Audacity работает, а она тоже на wx сделана

@elfmz
Copy link
Owner

elfmz commented May 2, 2023

Да тут магия какаято, вот такой простейший пример: https://pastecode.io/s/ksm4we9u
Тут текст контрол и кнопка.
Кнопка выводит в консоль содержимое текста из буфера обмена и одновременно заносит в буфер строку 1234567890
Так вот, ксли копипастить в текстовом контроле - все работает. А если кнопкой - то получается локальный клипборд для этой апликухи.

@unxed
Copy link
Contributor

unxed commented May 2, 2023

А этот баг с тестовой аппой проявляется только а виндовом вэйленде, или в чистой убунту на вэйленде тоже?

@unxed
Copy link
Contributor

unxed commented May 2, 2023

Ну может можно именно для вэйленда сделать workaround с таким же контролом, только невидимым, и слать туда эмуляцию ctrl-c/v. После хака с акселераторами это даже не так уж и weird :)

И наверное тикет в wx отписать стоит

@atolismesh
Copy link
Contributor Author

atolismesh commented Mar 12, 2024

собрать у себя в WSLg wxWidgets и проверить, работает ли Copy/Paste между Telegram и вот этой тестовой приложухой

Проверил программу "text" из wxWidgets под WSLg + Ubuntu 23.10.
Копирование между "text" и "Telegram (linux)" не работает в обе стороны.
Копирование между "text" и "far2l GUI" не работает в обе стороны.
Копирование между "text" и "far2l GUI с GDK_BACKEND=x11" не работает в обе стороны.
Копирование между "Telegram (linux)" и "far2l GUI с GDK_BACKEND=x11" работает в обе стороны.

@unxed
Copy link
Contributor

unxed commented Mar 13, 2024

Кто может руками wx собрать, попробуйте с этим вот патчиком, пожалуйста
wxWidgets/wxWidgets#24400

@unxed
Copy link
Contributor

unxed commented Mar 14, 2024

вот эта штука по идее должна решать проблему
#2070

@atolismesh
Copy link
Contributor Author

Проверил под native Ubuntu 23.10 + Wayland.

export WXTRACE="clipboard"
FAR2L_STD=~/far2l.log ./far2l --notty 

Копирование из телеграмма в fa2l gui заработало:

OpenClipboard
13:43:48: Trace: (clipboard) Checking if format UTF8_STRING is available
13:43:48: Trace: (clipboard) Received available formats for clipboard CLIPBOARD
13:43:48: Trace: (clipboard)   text/plain
13:43:48: Trace: (clipboard)   text/plain;charset=utf-8
13:43:48: Trace: (clipboard) Checking if format STRING is available
13:43:48: Trace: (clipboard) Received available formats for clipboard CLIPBOARD
13:43:48: Trace: (clipboard)   text/plain
13:43:48: Trace: (clipboard)   text/plain;charset=utf-8
13:43:48: Trace: (clipboard) GetData(): format not found
13:43:48: Trace: (clipboard) Checking if format text/plain;charset=utf-8 is available
13:43:48: Trace: (clipboard) Received available formats for clipboard CLIPBOARD
13:43:48: Trace: (clipboard)   text/plain
13:43:48: Trace: (clipboard)   text/plain;charset=utf-8
13:43:48: Trace: (clipboard) Requesting format text/plain;charset=utf-8
13:43:48: Trace: (clipboard) Received selection text/plain;charset=utf-8, len=304
OnClipboardGetData(13) - found MIME-compatible text format
CloseClipboard without data

Копирование из fa2l gui в телеграмм заработало:

13:45:05: Trace: (clipboard) Adding support for text/plain;charset=utf-8
13:45:05: Trace: (clipboard) Adding support for STRING
13:45:05: Trace: (clipboard) Adding support for UTF8_STRING
wxTheClipboard->SetData - OK
13:45:05: Trace: (clipboard) Clipboard data requested
13:45:05: Trace: (clipboard) clipboard data in format text/plain;charset=utf-8, GtkSelectionData is target=text/plain;charset=utf-8 type=ATOM selection=CLIPBOARD timestamp=0
13:45:05: Trace: (clipboard) Valid clipboard data of size 73 found


OpenClipboard
13:45:08: Trace: (clipboard) Checking if format UTF8_STRING is available
13:45:08: Trace: (clipboard) Received available formats for clipboard CLIPBOARD
13:45:08: Trace: (clipboard)   TIMESTAMP
13:45:08: Trace: (clipboard)   TARGETS
13:45:08: Trace: (clipboard)   MULTIPLE
13:45:08: Trace: (clipboard)   TIMESTAMP
13:45:08: Trace: (clipboard)   text/plain;charset=utf-8
13:45:08: Trace: (clipboard)   STRING
13:45:08: Trace: (clipboard)   UTF8_STRING
13:45:08: Trace: (clipboard) Requesting format UTF8_STRING
13:45:08: Trace: (clipboard) Clipboard data requested
13:45:08: Trace: (clipboard) clipboard data in format UTF8_STRING, GtkSelectionData is target=UTF8_STRING type=NONE selection=CLIPBOARD timestamp=0
13:45:08: Trace: (clipboard) Valid clipboard data of size 73 found
13:45:08: Trace: (clipboard) Received selection UTF8_STRING, len=73
OnClipboardGetData(13) - found wx-compatible text format
13:45:08: Trace: (clipboard) Checking if format FAR_VerticalBlock_Unicode is available
13:45:08: Trace: (clipboard) Received available formats for clipboard CLIPBOARD
13:45:08: Trace: (clipboard)   TIMESTAMP
13:45:08: Trace: (clipboard)   TARGETS
13:45:08: Trace: (clipboard)   MULTIPLE
13:45:08: Trace: (clipboard)   TIMESTAMP
13:45:08: Trace: (clipboard)   text/plain;charset=utf-8
13:45:08: Trace: (clipboard)   STRING
13:45:08: Trace: (clipboard)   UTF8_STRING
CloseClipboard without data

@unxed
Copy link
Contributor

unxed commented Mar 16, 2024

В wslg фикса из #2070 может быть недостаточно, там у некоторых вообще каждая аппа в своей отдельной клипбордной песочнице живёт, судя по сообщениям. В этом ещё надо разбираться.

@atolismesh
Copy link
Contributor Author

Результаты проверки #2070 под wslg (как переписывались с @unxed в телеграм группе).

WSL version: 2.1.5.0
Kernel version: 5.15.146.1-2
WSLg version: 1.0.60
MSRDC version: 1.2.5105
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22631.3296

Ubuntu 23.10

Копирование из телеграма в far2l GUI работает, пока не скопируешь что-нибудь в самом far2l. После этого в far2l копируется только то, что было до этого помещено в clipboard в самом far2l
Прикладываю полный лог тестирования.
far2l_wayl.3.log

До 19:15:00 делал копирование из Telegram, gedit, терминала в far2l .
После этого скопировал в far2l текст в редакторе far2l . После этого в far2l копируется только то, что было до этого помещено в clipboard в самом far2l. А вот между Telegram и терминалом и gedit все прекрасно продолжает копироваться в обе стороны.

Если в far2l что-то скопировать в clipboard, то в терминала wl-paste -l выдает "TIMESTAMP"

@unxed
Copy link
Contributor

unxed commented Mar 17, 2024

All-in-one

@i2van а можете, пожалуйста, переписать этот скрипт так, чтоб путь к установке Windows определялся автоматически, а не использовался захардкоженный?

@i2van
Copy link

i2van commented Mar 17, 2024

All-in-one

@i2van а можете, пожалуйста, переписать этот скрипт так, чтоб путь к установке Windows определялся автоматически, а не использовался захардкоженный?

Для этого надо получить доступ к env vars Windows, затем преобразовать их из Windows path c:\.. в Unix path /... Это того не стоит. К тому же, копи-пейст сейчас прекрасно работает из коробки на master бранче, проверено в Win 10 WSL2 Ubuntu 22.04.4 LTS FAR2L, version 2.6.0-2024-03-17-8ce5b109-beta Linux x86_64

Запускаю так:

#!/bin/bash

GDK_BACKEND=x11 far2l >/dev/null 2>&1 &

@unxed
Copy link
Contributor

unxed commented Mar 17, 2024

А, ну с x11 работает, да. С Вэйлендом вот в одну сторону только

@atolismesh
Copy link
Contributor Author

а можете, пожалуйста, переписать этот скрипт так, чтоб путь к установке Windows определялся автоматически, а не использовался захардкоженный?

Он вот так тоже работает из-под wsl:

#!/bin/bash

case "$1" in
get)
    powershell.exe -Command Get-Clipboard
;;
set)
   echo "$2" | clip.exe
;;
"")
    (far2l --clipboard=$(readlink -f $0) >/dev/null 2>&1 &)
;;
esac

@unxed
Copy link
Contributor

unxed commented Mar 18, 2024

Btw, as clipboard works ok under Wayland on native setups now (as we see in #2053), this seems to be wslg bug:
microsoft/wslg#1216

@unxed
Copy link
Contributor

unxed commented Mar 18, 2024

  1. В чате жалуются, что решение на Powershell работает только на запись клипборда.
  2. Вот тут — возможные причины и решение (включающее случай, когда powershell'а и вовсе нет). Надо только адаптировать его под нас.

@atolismesh

    // Although PowerShell is more modern and can be run without a script file,
    // it is far slower and requires a very complicated workaround for
    // https://github.com/microsoft/terminal/issues/280. Therefore, we stick
    // to CScript.

@unxed
Copy link
Contributor

unxed commented Mar 18, 2024

Also possible solution:
Также возможное решение:
microsoft/terminal#280 (comment)

@atolismesh
Copy link
Contributor Author

atolismesh commented Mar 18, 2024

@i2van @unxed

Вообще-то автором был @i2van
Посмотрел, поправил.

#!/bin/bash

case "$1" in
get)
    powershell.exe -Command Get-Clipboard
;;
set)
   CONTENT=$(cat) 
   echo "$CONTENT" | clip.exe
   echo "$CONTENT"
;;
"")
    (far2l --clipboard=$(readlink -f $0) >/dev/null 2>&1 &)
;;
esac

@unxed
Copy link
Contributor

unxed commented Mar 18, 2024

Спасибо, супер! Вот думаю, а не применять ли этот скрипт автоматически под wslg. А то там с буфером по ходу проблемы не только под вэйлендом, но и под иксами (многострочный текст не пролезает у людей).

Powershell в нынешней Винде из коробки есть? Если нет, надо ещё ветку кода на CScript добавить как запасной вариант.

@Zeroes1
Copy link

Zeroes1 commented Mar 18, 2024

Windows 7: PowerShell 2.0
Windows 8: PowerShell 3.0
Windows 8.1: PowerShell 4.0
Windows 10 +11 : PowerShell 5.1

@atolismesh
Copy link
Contributor Author

atolismesh commented Mar 18, 2024

Пришло на ум более универсальное решение для WSL
Запускаем cscript.exe; если его не находим, то более медленный powershell.exe.
Для этого

Создаем в $HOME/.config/far2l/ файл getclipboard.vbs с содержимым:

WScript.StdOut.Write CreateObject("HTMLFile").ParentWindow.ClipboardData.GetData("Text")
И скрипт под него:

#!/bin/sh

case "$1" in
get)
     if command -v cscript.exe >/dev/null 2>&1; then 
        cscript.exe //Nologo \\\\wsl.localhost\\"$WSL_DISTRO_NAME"\\"$HOME"\\.config\\far2l\\getclipboard.vbs 
     else
     	powershell.exe -Command Get-Clipboard
     fi

;;
set)
    CONTENT=$(cat)
    echo "$CONTENT" | clip.exe
    echo "$CONTENT"
;;
"")
    (far2l --clipboard=$(readlink -f $0) >/dev/null 2>&1 &)
;;
esac

@unxed
Copy link
Contributor

unxed commented Mar 18, 2024

А сделай PRом сюда, пожалуйста:
https://github.com/unxed/far2l/tree/minor-fix

atolismesh added a commit to atolismesh/far2l that referenced this issue Mar 18, 2024
@atolismesh
Copy link
Contributor Author

Issue resolved by #2080

@unxed
Copy link
Contributor

unxed commented Jul 16, 2024

После недавних исправлений проблемы с буфером обмена под Wayland должны были уйти. У кого они оставались, перепроверьте, пожалуйста.

After recent fixes, problems with the clipboard under Wayland should have gone away. Whoever had them, please check now.

@i2van @Artyom17 @Zeroes1 @atolismesh

@unxed
Copy link
Contributor

unxed commented Jul 20, 2024

Там ещё в wsl[g] обнаружились проблемы с кодировками при работе с буфером обмена. Поправили. У кого такое было, перепроверьте, пожалуйста, на свежем мастере.

In wsl[g] were discovered problems with encodings when working with the clipboard. They are now fixed. If anyone has had such problems, please check again in recent master.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants