Telegram свернись, Telegram вернись

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Telegram свернись, Telegram вернись

#1

10 авг 2022, 21:32

Linuxmint 21 Cinnamon

В настройках "Параметры системы" -> "Окна" -> "Раскладка кнопок" можно включить режим Gnome, что скроет кнопки "Скрыть" и "Развернуть".
Можно ли каким-то образом запустить отдельное приложение с такой настройкой?

Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

rogoznik
Сообщения: 10015
Зарегистрирован: 27 июн 2017, 13:36
Решено: 128
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1950 раз
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#2

10 авг 2022, 21:44

Вряд ли. Элементы управления окном предоставляет оконный менеджер.
В случае Cinnamon - это muffin, форк mutter из гном.
Обычно эти элементы настраиваются на этапе разработки приложения. И в дальнейшем их доступность - это реакция на внешние условия
ИзображениеИзображение

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#3

10 авг 2022, 22:49

Печально.
Да я всё с Telegram`ом борюсь ))
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#4

10 авг 2022, 23:08

Люблю линукс! Всё можно сделать, хоть через задницу, но можно)))
xprop -name 'Telegram' -format _MOTIF_WM_HINTS 32i -set _MOTIF_WM_HINTS 1
Только оно вообще все кнопки сносит. И закрыть не получится, и свернуть. Но проблемы трёх кликов это никак не решает, увы... Да, двойка на конце сносит декорации нафиг, нолик - возвращает как было.

UPD: сколько там всего интересного, в этой команде. Может, и нужная настройка найдётся, если поэкспериментировать...

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#5

11 авг 2022, 02:02

В общем, команда xprop -name 'Telegram' _NET_WM_STATE выдает состояние окна телеги. Например, _NET_WM_STATE_HIDDEN если оно свёрнуто или _NET_WM_STATE_DEMANDS_ATTENTION если оно требует внимания (мигает на панели задач вместо того, чтобы нормально нарисоваться на экране). А дальше два путя: нужен какой-то демон, который будет отслеживать состояние окна и активировать его, если оно требует внимания. Или наоборот, закрывать, если оно свернуто. И то, и другое легко делается через wmctrl. Сама телега никуда из трея не денется: даже набранное, но не отправленное сообщение не пропадет.

Только вот как это лучше сделать? Скрипт, который раз в секунду будет чекать выхлоп команды, или есть более правильные варианты? Тут я как-то совсем не советчик...

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#6

11 авг 2022, 10:51

Обратил внимание, что имя окна меняется произвольным образом.
Telegram
Telegram (1)
...

Пока написал такой сценарий:

Код: Выделить всё

title=`wmctrl -l | egrep -o Telegram.*`									# Имя окна Telegram

if [ -n "$title" ]														# Если окно найдено
	then
		echo "title = "$title

		status=`xprop -name "$title" _NET_WM_STATE`						# Текущее состояние окна
		echo "status = "$status

		marker1="_NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN, _NET_WM_STATE_DEMANDS_ATTENTION"	# Маркер свёрнутого мигающего окна

		if [ "$status" == "$marker1" ]									# Статус соответствует маркеру
			then
				wmctrl -a "$title"										# Активация окна
		fi

	else
		echo "Окно Telegram не найдено"
fi
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

rogoznik
Сообщения: 10015
Зарегистрирован: 27 июн 2017, 13:36
Решено: 128
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1950 раз
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#7

11 авг 2022, 10:55

demonlibra, а смысл делать вывод, если ты этот скрипт по хоткею вызываешь или он в фоне выполняется по таймеру?
ИзображениеИзображение

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#8

11 авг 2022, 11:06

Думаю над этим.
Не хочется делать так.

Код: Выделить всё

./Telegram &
for ((;;))
	do
		echo "Бесконечный цикл"
		...
		sleep 1
done
Может быть есть какой-то более умный способ инициировать запуск сценария, чем такой? Хотя бы при любом нажатии в области трея.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#9

11 авг 2022, 11:33

Да, вот тоже завис вчера на бесконечном цикле. Точнее, на нежелании к нему прибегать.
"_NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN, _NET_WM_STATE_DEMANDS_ATTENTION" - вот тут, если окно не свёрнуто, может быть просто один статус "demands attention". При этом окно мигает и не прорисовывается.

Думаю, мож в багтрекер написать? Или mint/muffin, или в телегу, или в оба.
Если в минтовский - то пусть вернут отключаемую опцию "Запретить похищать фокус". Так и надо, чтобы похищали. Вообще не жалко))
Если в телегу - то добавить проверку на DE, и если это Циннамон, то пнуть лишний раз окно наверх. Думаю, это можно и кодом сделать, без wmctrl и лишних зависимостей.

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#10

11 авг 2022, 16:54

demonlibra, спасибо, всё фунциклирует!

Код: Выделить всё

#!/bin/bash
while true
do
    title=`wmctrl -l | egrep -o Telegram.*`
    if [ -n "$title" ];	then
        status=`xprop -name "$title" _NET_WM_STATE`
        if [[ $status == *"DEMANDS_ATTENTION"* ]]; then
            wmctrl -R "$title"
	fi
    fi
    sleep 1
done
С sleep 0.3 жрет до 0,1% CPU, с секундной задержкой почти незаметен.

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#11

11 авг 2022, 17:12

Я за день вылови пару моментов, когда этот сценарий не работает.
Надо задавать условия:

Код: Выделить всё

marker1="_NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN, _NET_WM_STATE_DEMANDS_ATTENTION"	
marker2="_NET_WM_STATE(ATOM) = _NET_WM_STATE_DEMANDS_ATTENTION"
				
if [ "$status" == "$marker1" ] || [ "$status" == "$marker2" ] # Статус соответствует маркеру
	then
		wmctrl -a "$title"												# Активация окна
fi
но при этом окно Telegram вываливается на передний план при получении уведомлений.
В общем костыль заставляет хромать другой ногой ))
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#12

11 авг 2022, 17:35

demonlibra писал(а):
11 авг 2022, 17:12
но при этом окно Telegram вываливается на передний план при получении уведомлений.
А если убрать галку "Настройки > Уведомления и звуки > Подсветка окна"? У меня вроде работает.

Варик скрипта с однократным получением ID окошка вместо поиска раз в секунду (я заметил, что он даже после перезапуска телеги не меняется, только после выхода из сессии).

Код: Выделить всё

#!/bin/bash

while true
do
    if [ -z $window_id ]; then
        window_id=`wmctrl -l | grep -i telegram | awk '{print $1}'`
    fi
    status=`xprop -id "$window_id" _NET_WM_STATE`
    if [[ $status == *"DEMANDS_ATTENTION"* ]]; then
        wmctrl -i -R "$window_id"
    fi
    sleep 1
done
Так, пожалуй, и оставлю)))

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#13

11 авг 2022, 18:14

До меня долго доходило, что название меняется так как содержит количество непрочитанных сообщений.

Небольшое условие к "бесконечному" циклу, чтобы сценарий завершился, если телегу закрыли

Код: Выделить всё

./Telegram &
sleep 5
while [[ -n `pgrep Telegram` ]]
...
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#14

11 авг 2022, 20:46

Ара Магеддон писал(а):
11 авг 2022, 17:35
Так, пожалуй, и оставлю)))
Почему-то если запустить сценарий в терминале, то всё прекрасно работает.
Но стоит это сделать в фоне, то эффект нулевой.
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#15

11 авг 2022, 21:21

demonlibra писал(а):
11 авг 2022, 20:46
Почему-то если запустить сценарий в терминале, то всё прекрасно работает.
Но стоит это сделать в фоне, то эффект нулевой.
Странно... у меня и в фоне работает. Запускал просто из nemo. А процесс висит в системном мониторе, не пропадает? Там ещё sleep у него должен быть, если с зависимостями смотреть. Как вариант - можно echo в лог вывести, посмотреть, что там в переменных.
Телега, если что, из flatpak-а. Скрипт просто в домашней папке валяется.
demonlibra писал(а):
11 авг 2022, 18:14
while [[ -n `pgrep Telegram` ]]
У меня только pgrep telegramPID выдаёт. Если с большой буквы написать - то пустое значение.
Последний раз редактировалось пользователем 1 Ара Магеддон; всего редактировалось раз: 11

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Скрыть кнопку свернуть для одного приложения

#16

11 авг 2022, 21:26

Кажется разобрался. Задал принудительно интерпритатор bash добавив в начало сценария строку

Код: Выделить всё

#!/bin/bash
Для запуска создал пункт в меню
/home/demonlibra/.local/share/applications/Telegram_fix.desktop

Код: Выделить всё

[Desktop Entry]
Name=Telegram fix
Comment=Desktop version of Telegram messaging app
Exec=/home/demonlibra/.scripts/telegram.sh
Icon=telegram
Terminal=false
StartupWMClass=TelegramDesktop
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
MimeType=x-scheme-handler/tg;
Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;
SingleMainWindow=true
X-GNOME-UsesNotifications=true
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Аватара пользователя

Ара Магеддон
Сообщения: 583
Зарегистрирован: 08 дек 2018, 01:08
Решено: 18
Благодарил (а): 37 раз
Поблагодарили: 141 раз

Скрыть кнопку свернуть для одного приложения

#17

11 авг 2022, 22:08

demonlibra писал(а):
11 авг 2022, 21:26
Задал принудительно интерпритатор bash добавив в начало сценария строку

Код: Выделить всё

#!/bin/bash
Движок сайта её коварно маскирует бледно-серым цветом почему-то )))

Аватара пользователя

WWolf
Сообщения: 3874
Зарегистрирован: 14 фев 2018, 00:51
Решено: 28
Откуда: Краснодар
Благодарил (а): 1682 раза
Поблагодарили: 1206 раз
Контактная информация:

Telegram свернись, Telegram вернись

#18

11 авг 2022, 22:38

Ара Магеддон, потому что # это коммент... А #! признак для интерпретатора скрипта, но от этого для синтаксиса он не перестаёт быть комментарием

Аватара пользователя

slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

Telegram свернись, Telegram вернись

#19

11 авг 2022, 22:48

Ара Магеддон писал(а):
11 авг 2022, 21:21
while [[ -n `pgrep Telegram` ]]
Вот извращенцы. Вам надо для цикла убедится, что программа запущена? Дык это можно сделать гораздо проще:
while pidof telegram-desktop
И все. Вместо telegram-desktop - подставить имя исполняемого файла программы.

Как работает:
1. while проверяет вывод errorlevel следующей за ним программы. Если 0 - выполняет цикл (так же работает if, кстати)
2. pidof - выдает pid(ы) запущенной(ых) программ(ы) на консоль, и возвращает 0 в качестве errorlevel если нашел хоть одну работающую копию. И 1 если не нашел.

P.S. test, [ и [[ - это программы. Которые тоже выдают 0 в errorlevel если описанное в их параметрах условие выполнено.

Аватара пользователя

Автор темы
demonlibra
Сообщения: 844
Зарегистрирован: 12 авг 2017, 09:09
Решено: 13
Откуда: Ростов-на-Дону
Благодарил (а): 29 раз
Поблагодарили: 204 раза
Контактная информация:

Telegram свернись, Telegram вернись

#20

14 авг 2022, 18:28

Ара Магеддон писал(а):
11 авг 2022, 11:33
Думаю, мож в багтрекер написать? Или mint/muffin
Написал, как смог.
https://github.com/linuxmint/muffin/issues/634
Basic (ZXSpectrum)→Ms-Dos→W95→W98→Me→XP→W7→Ubuntu 15.10→Xubuntu 16.04→Linux Mint 18.2-21.1
Контекстное меню Nemo
Сценарий вывода данных оценки ресурса диска SSD

Ответить

Вернуться в «Cinnamon»

Кто сейчас на конференции

Сейчас этот форум просматривают: KSG972 и 7 гостей