LINUX.ORG.RU

Избранные сообщения deep-purple

Adobe Flash Player в 2022: некромагия и ностальгия

Галерея — Скриншоты

Привет ненужнисты, флеш-попобольщики, некромансеры и ностальгирующие по ламповому!

Недавно перебирал свалку своего файлового сервера, и тут наткнулся на шедевры ушедшей эпохи: кровавые Happy Tree Friends, парализующие офисную работу серии казуалок YetiSports, отвратительные серии JoeCartoon, божественный beat'em-up Disorderly от Zeebarf (у них вообще все игры очень самобытные), задротский скилловый Happy Wheel и прочие интересности уже «далёкой молодости»... Честно говоря потратил время, чтобы отыскать чем это можно открыть сейчас, и таки обнаружил в своих закромах Некрономикон мирно упакованный Adobe Flash Player под линь.

Правда проигрывает совсем-совсем не идеально, хоть и нативщина - картинка часто сильно артефачит. Отсюда вопрос: кто-нибудь занимался чёрной магией воспроизведением swf на чём-нибудь современном? Есть рецепт нормального запуска флеша? У меня есть конченный костыльный вариант - взять wine и через него запустить виндовый Adobe Flash Player, который точно запускает всё на отличном уровне. Но... это как-то не комильфо, если есть менее костыльные варианты.

>>> Просмотр (1160x840, 872 Kb)

 , ,

NeTC
()

Gamepad

Форум — Linux-hardware

Какой имеет смысл брать в плане безгеморного подключения/работы под онтопиком?

Если это имеет значение, то дистрибутив - KDE Neon, на Wayland пока не перехожу

 

wingear
()

ищу качественный топор.

Форум — Linux-hardware

Здравствуйте.
захотелось для десктопа прибрести wi-fi адаптер.
(пока облизывался на новые роутеры, подумалось, а нафига, если не у всех клиентов есть)
понятно, чтоб маленький юсб-свисток с ах имеет мало смысла.
есть варианты с антеннами побольше, совместимые с linux?
п.с. pcie занят, надо usb.

 , wi-fi ax

darkenshvein
()

А чем сегодня скачивать ролики с Youtube?

Форум — General

Давно мечтал скачивать ролики с ютуба, но такой функции он не предоставляет, потому что цель ютуба - заставить вас заходить на него снова и снова. Часто хорошие ролики он просто удаляет, и потом жалеешь, что не скачал вовремя…

Начал искать, чем сегодня качают эти ролики. Первым делом нашлась утилита youtube-dl. Пока не разобрался, кажется это что-то консольное, команды надо вводить.

Недавно вышел некий форк yt-dlp - пишут, что это лучше, быстрее развивается, больше фич. Что можете сказать?

https://www.opennet.ru/opennews/art.shtml?num=55726

А вчера вышел новый релиз youtube-dl, спустя полгода после предыдущего.

https://www.opennet.ru/opennews/art.shtml?num=56366

Пишут, что ютуб активно скручивает скорость закачки через youtube-dl до 64 кбит/c, и что надо использовать yt-dlp, и вообще за ним будущее. Так чем лучше пользоваться?

 , ,

bairos
()

Немонстроузный web-проигрыватель бесконечного DASH потока с IP камеры.

Форум — Web-development

Все говнобраузеры до сих пор не умеют в RTSP и даже не умеют нормально проигрывать бесконечный поток. Какое-то позорище натуральное. Бесконечный поток с камеры, например, поставленный на паузу вообще ни разу не должен продолжаться с той самой секунды когда его остановили. Внезапно. А должен продолжаться при снятии с паузы с самого последнего принятого keyframe. И браузеру нахер не нужно сжирать всю память пытаясь сохранить всё, что было передано с момента нажатия на паузу. Но, видимо, для браузерописцев эти элементарные вещи совершенно недоступны для понимания, и в результате реализация HTMLVideoElement’а, что в хроме, что в фаерфоксе является полным говном.

Для проигрывания таких потоков вебмакаки используют монстроузные жирнющие жабоскриптные плееры, которые фактически с ложечки кормят HTMLVideoElement загружаемыми кусочками видео, обычно DASH или HLS.

Оказалось что самый маленький плеер умеющий проигрывать multiple-file-DASH видео (openplayer.js) весит 167 килобайт, сцуко! И это минифицированный вариант! Чему там можно столько весить я нихрена не понял. Про «референсный» dash.js я вообще молчу. Это лютейший звездец размером больше полмегабайта в минифицированном виде. Мелкософтовский пример жабоскриптного DASH-плеера заточен на single-file-DASH. А ffmpeg c -single_file 1 пишет поток на диск бесконечно, засирая диск далеко не всегда нужным видеомусором.

Разумеется, как всегда, когда дело касается вебни, чтобы решить элементарную проблему, вместо того, чтобы взять какой-нибудь эталонный микроскопический плеер, пришлось быстренько изобрести велосипед. Разумеется, всё легко влезло в смешные 5 килобайт, причём в неминифицированном виде.

Вот велосипед:

Жабоскрипт:

'use strict'

function Dash( id )
{
    var _ = this;
    _.v = document.getElementById( id );
    var url = _.v.src;
    _.v.src = undefined;
    var slash = url.lastIndexOf("/");
    _.path = url.substring( 0, slash + 1 );
    _.mpd = url.substring( slash + 1 );
    _.init = true;
    _.xhr = [];
    _.load_mpd( false );
    _.video_update  = function() { _._video_update(); };
    _.video_updated = function() { _._video_updated(); };
    _.video_updating = false;

    _.v.addEventListener( 'click', _.toggle.bind(_), false );

    _.v.addEventListener( 'pause', function ()
    {
        console.log( 'paused' );
        this.removeEventListener( 'timeupdate', _.video_update );
        if( _.videoSource.updating ) _.videoSource.abort();
        _.xhr.forEach( function ( xhr ) { xhr.abort(); } );
    }, false);

    _.v.addEventListener( 'play', function()
    {
        console.log( 'playing' ); 
        this.addEventListener( 'timeupdate', _.video_update, false );
    }, false);

    _.v.addEventListener( 'ended', function()
    {
        console.log( 'ended' );
        this.removeEventListener( 'timeupdate', _.video_update );
    }, false);

    _.v.addEventListener( 'error', function(e) { console.log( 'video error: ' + e ); }, false );
    _.v.addEventListener( 'emptied', function() { console.log( 'emptied' ); }, false );
}

Dash.prototype.play = function() { this.load_mpd( true ); }
Dash.prototype.stop = function() { this.v.pause(); }
Dash.prototype.toggle = function()
{
    if( this.v.paused == true ) this.play();
    else                        this.stop();
}

Dash.prototype.mpd_parse = function( data )
{
    var _ = this, e, g;
    e = data.querySelectorAll("Representation")[0];
    g = e.getAttribute.bind( e );
    _.id        = g( 'id' );
    _.mimetype  = g( 'mimeType' );
    _.codecs    = g( 'codecs' );
    _.width     = g( 'width' );
    _.height    = g( 'height' );

    e = data.querySelectorAll( 'SegmentTemplate' )[0];
    g = e.getAttribute.bind( e );
    _.timescale = g( 'timescale' );
    _.ini       = g( 'initialization' );
    _.seg       = g( 'media' );
    _.start     = g( 'startNumber' );

    _.ini = _.ini.replace( '$RepresentationID$', _.id );
    _.seg = _.seg.replace( '$RepresentationID$', _.id );

    _.duration = [];

    data.querySelectorAll("S").forEach( function( v, i )
    {
        _.duration[i] = v.getAttribute( 'd' ) / _.timescale;
        if( i == 0 ) _.ts = v.getAttribute( 't' );
    } );
}

Dash.prototype.load_mpd = function( start )
{
    var _ = this;
    _.xhr[0] = new XMLHttpRequest();
    _.xhr[0].onreadystatechange = function ()
    {
        if( this.readyState != this.DONE ) return;
        if( this.status != 200 ) return;

        var parser = new DOMParser();
        var xmlData = parser.parseFromString( this.response, 'text/xml' );

        _.mpd_parse( xmlData );

        if( start )
        {
            _.video_updating = false;
            _.num = parseInt( _.start ) + 1;
            _.ts_current = _.v.currentTime;
            _.load_seg();
        }

        if( _.init )
        {
            _.v.width  = _.width;
            _.v.height = _.height;
            _.mediaSource = new window.MediaSource();
            _.mediaSource.addEventListener( 'sourceopen', function (e) {
                _.videoSource = _.mediaSource.addSourceBuffer( _.mimetype + '; codecs="' + _.codecs + '"' );
                _.videoSource.mode = 'sequence';
                _.videoSource.addEventListener( 'updateend', _.video_updated, false );
                _.load_ini();
            }, false );
            _.v.src = URL.createObjectURL( _.mediaSource );
        }
    }
    _.xhr[0].open( 'GET', _.path + _.mpd );
    _.xhr[0].send();
}

Dash.prototype.append = function( f )
{
    var _ = this;
    _.xhr[1] = new XMLHttpRequest();
    _.xhr[1].responseType = 'arraybuffer';
    _.xhr[1].onreadystatechange = function ()
    {
        if( this.readyState != this.DONE ) return;
        if( this.status != 200 ) return;
        _.videoSource.appendBuffer( new Uint8Array( this.response ) );
    };
    _.xhr[1].open( 'GET', _.path + f );
    _.xhr[1].send();
}

Dash.prototype.load_ini = function()
{
    this.append( this.ini );
}

Dash.prototype.load_seg = function()
{
    var n = this.num.toString();
    if( n.length < 5 ) n = ( '0000' + n ).slice( -5 );
    this.append( this.seg.replace( '$Number%05d$', n ) );
}

Dash.prototype._video_update = function()
{
    var _ = this;
    if( _.video_updating ) return;
    var i = _.num - _.start;
    if( _.v.currentTime >= _.ts_current - _.duration[i] * 0.5 )
    {
        _.video_updating = true;
        _.load_seg();
    }
}

Dash.prototype._video_updated = function()
{
    var _ = this;

    if( _.init ) { _.init = false; return; }

    if( _.v.paused == true )
    {
        _.v.currentTime = _.ts_current;
        _.v.play();
    }
    _.ts_current += _.duration[ _.num - _.start ];
    _.num++;
    if( _.num - _.start >= _.duration.length - 1 ) _.load_mpd( false );
    _.video_updating = false;
}

Страничка:

<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT src="tiny-dash.js" type="text/javascript"></SCRIPT>
<SCRIPT>
var dash;
window.addEventListener( 'load', function() { dash = new Dash( 'dashvideo' ); }, false );
</SCRIPT>
<TITLE>Camera stream</TITLE>
</HEAD>
<BODY bgcolor="#000000" text="#c0c0c0">
<VIDEO id="dashvideo" src="media/manifest.mpd" preload="none">No video available</video>
</DIV>
</BODY>

На серваке из-под nobody запустить

#!/bin/sh

stream="rtsp://host:port/ch0_264"
target="/где.там.страничка.лежит/media/manifest.mpd"

/usr/bin/ffmpeg \
-probesize 32 \
-loglevel quiet \
-i "${stream}" \
-an \
-c:v copy \
-f dash \
-window_size 4 \
-extra_window_size 1 \
-min_seg_duration 2000000 \
-remove_at_exit 1 \
"${target}"

В /где.там.страничка.лежит/media лучше примонтировать tmpfs - и шустро, и диск не трогает.

Длительность сегмента и размер окна можно подкрутить, если канал убогий.

Для руления плеером из жабоскрипта есть методы Dash.play(), Dash.pause() и Dash.toggle(). Всякие кнопки и украшательства добавляются по вкусу.

Работает в хроме и фаерфоксе. Задержка, разумеется есть, но без неё, увы, при воспроизведении DASH не обойтись.

Решение отлично подходит для камер, которые нафиг не нужно куда-то записывать, но которые хотят смотреть много (и даже очень много) людей одновременно. HTTP сервер всего лишь раздаёт не особо большие файлики из tmpfs, так что нагрузка минимальна.

В принципе, это всё несложно использовать для организации self-hosted zoom при минимальной доработке - нужно только организовать передачу потоков с вебок на сервер (да хоть через netcat), а там их так же раскладывать в сегменты ffmpeg’ом.

Лицензия - WTFPL

ЗЫ: Хотел в теги добавить ещё «копрофилию» но ограничение на 5 тегов испортило всю малину.

ЗЗЫ: Это, кстати, эксклюзив специально для ЛОР. :) Нигде больше публиковать это я не собираюсь.

 , , , ,

Stanson
()

Как включить сервер если apcupsd его выключит?

Форум — Admin

ни консолей, ни еще чего что могло бы wakeup по lan отправить просто нет, как то возможно поднять сервак после появления питания? т.е. не тот момент, когда apc выключил сервер и сам погас, а потом появился «свет» и сервак это отрабатывает, а когда apc выключил его, но сам не успел разрядиться в 0 при этом продолжает работать БП на серваке а «свет» опять дали.

 

wolverin
()

Занимаюсь радиолюбительством

Галерея — Рабочие места

Во время карантина решил собрать коротковолновый трансивер собственной конструкции. На днях понадобилось в нём кое-что перепаять.

Оборудование на фото:

  • Ноутбук 15-дюймовый HP-1301ng на процессоре Intel Core i7;
  • Монитор 27 дюймов FullHD;
  • Осциллограф китайский Hantek 2C72;
  • Измеритель АЧХ NanoVNA;
  • Лабораторный БП и паяльная станция китайские;
  • На заднем плане ламповый усилитель на 6П3С+6Н8С;
  • Собственно самодельный трансивер во вскрытом виде;

Софт:

  • На ноуте установлена Kubuntu 18.04 с KDE Plasma 5.12; оформление почти дефолт;
  • Сейчас запущен KiCAD, в котором я разрабатываю свои самоделки;
  • Для написания прошивок для STM32 использую libopencm3, Vim и Makefile. Этот софт остался за кадром;

>>> Просмотр (4000x2250, 759 Kb)

 , ,

DarthVadimius
()

Какое-то приложение все время меняет DNS на Гугловский.

Форум — Security

Сразу говорю - никаких ВПН я не ставил. Как запустил систему, так и есть. А есть такое: в nmcli dev show и systemd-resolve –status прописан провайдеровский ДНС. В GUI настройках Сеть - Параметры подключения, в графе ДНС отображаются ДНС - провайдеровские. Нигде нет и намека на смену ДНС. Что же происходит дальше. Я захожу на сайты типа DNS leak, IP leak и они показывают следующее: IP провайдеровский, а ДНС - целая куча гугловских (вот фото, если кому любопытно https://i.stack.imgur.com/AGgPR.png ) И я уже задолбался искать решение. Спрашивал по разным форумам, но все начинают ответ типа «Вы установили ВПН», «Вы копались в настройках». Но блин, не устанавливал я ВПН. Откуда в системе гугловские серверы? Повторюсь, в настройках я не лазил, и отображаются там везде провайдеровские ДНС, откуда на сайтах отображаются гугловские? Может какая-то программа меняет сервера на гугловские, но какая? Помогите найти ее. Система Убунту 18.04

 ,

RedHatt
()

opengl без Х

Форум — Development

Всем доброго! Подскажите пожалуйста, я понимаю, что этот пирог крайне многослойный, но я никак не могу сообразить в каком слое какой крем. Использую ffmpeg для просмотра видео в консоле и без иксов. Вопрос в следующем. Могу ли я выйти на работу с opengl из консоли и юзать всю его мощь? В каком направлении и что поискать, почитать? Т.е. в моем случае как будет происходить инициализация и возможно ли это вообще.

 

adamsgreen
()

libfuse, треды и timerfd

Форум — Development

до запуска fuse_main() создается тесколько тредов.

В каждом треде создаётся таймер через timerfd_create(CLOCK_REALTIME, 0)

далее делаем timerfd_settime(tfd, TFD_TIMER_ABSTIME,...)

таймер через 2 секунды и интервал 2 секунды.

все работает!

как только запускается fuse_main() в виде демона, то все чтение из tfd прекращается.

Что это за @#$%^&*! ?

 , , timerfd

vel
()

Инструмент для обнаружения гонки данных?

Форум — Development

Вот написал я некий замороченный параллельный код на плюсах и OpenMP. Поскольку там производительность важна, то я хитро извернулся и свел число мьютексов к минимуму - циклы так устроены что разные потоки не должны писать в одни и те же данные или читать данные которые пишет другой поток.

А теперь как мне проверить что это правильно работает?;-)

Ну то есть понятно, что я могу запустить последовательную версию и сравнить ее результаты с параллельной. Но может есть какая то хитрая утилита которая сразу ткнет меня носом - вот тут конфликт между потоками?

 , , ,

AntonI
()

Монтирование образа целого диска

Форум — General

Проверить

# fdisk -l disk.img

Подключить

# losetup -f -P disk.img

The -f option will search for the next free loop device to attach the image to. The -P option will trigger a scan for partitions on the attached image and create devices for each partition detected.

Обзор

# losetup -l

Монтируем нужные разделы, работаем с ними, отмонтируем разделы.

Отключить

# losetup -d /dev/loopXXX
Небольшая инструкция, чтобы самому не забыть и другим помочь.

Оригинал: https://blog.tinned-software.net/mount-raw-image-of-entire-disc/

 , , , памятка

justAmoment
()

Ищу учебник по протоколу X11

Форум — General

Я прочитал сам «стандарт» на протокол, но там в самом начале написано, что это технический документ, а не учебник, и не руководство.

Посоветуйте, пожалуйста, книжку в которой расписываются примеры использования, а так же обоснования принятых в протоколе решений.

 

Einstok_Fair
()

Google: полноценная блокировка рекламы в Chrome только для энтерпрайзных пользователей

Форум — Talks

Собственно, сабж. Старый API, который используют блокировщики, скоро будет удалён. Новый не позволяет эффективно блокировать рекламу. Гугл теперь официально корпорация зла?

Ссылка: https://9to5google.com/2019/05/29/chrome-ad-blocking-enterprise-manifest-v3/

 , ,

hateyoufeel
()

IndirectGLX + software openGL rendering - не работает на современных линуксах

Форум — General

Народ, возникла следующая проблема:

у меня есть необходимость запускать X приложения на машинах, на которых нет запущенного X сервера. Т.е. эта та пресловутая сетевая прозрачность X протокола. Это часть работает хорошо и полностью устраивает, но иногда этим приложением нужно отрисовать что-то используя openGL. Это не игры, а инженерная графика, и в принципе производительность устраивала, даже учитывая что все это отрисовывалось программно, без 3д ускорения.

Т.е. схема такая:

узел, где запускается приложение (node) ----> сервер с Xorg (server)

и сервер и узел - это линукс машины x86_64. на сервере вообще нет видео карты, Xserver там использует драйвер xorgxrdp, далее картинка уходит в xrdp и клиенту на винде по rdp протоколу.

эта схема работала хорошо до версии (включая) Xorg 1.19.3, т.е. X клиенты могли отображать 3д через openGL на X сервере используя протокол GLX. Кроме того эта схема работает, если в качестве сервера используем windows машину с запущенным X сервером например стареньким Xming - причем в этом случае мы можем даже ускорять openGL через драйвер wgl и видеокарту хоста.

но потом система на сервере обновилась (драму можно прочитать тут CentOS 7 - недоступность промежуточных подрелизов) и отвалилась openGL графика.

Это выражается в том, что любое приложение которое хочет вывести графику через openGL - выводит в это место черный квадрат.

Эта проблема присутствует на следующих системах которые я протестировал: CentOS 7.6, fedora - 27,28,29, ubuntu 18.4,18.10, debian 9, на всех этих системах Xorg новее чем 1.19.3.

Cистемы на которых все работает: CentOS до 7.4 включительно (7.5 не проверял), openSuse 42.3 и на wnindows/Xming и другие x серверы для виндовс.

Как эту проблему смоделировать, без дополнительных ПК или виртуальных машин:

  1. убедиться, что IndirectGLX разрешен, в последних версиях Xorg его по умолчанию выключили. Т.е. если glxinfo -i выводит ошибку - то IGLX выключен. Что-бы включить - либо в командную строку Xorg добавляем +iglx, либо бросаем drop-in файл в /etc/X11/xorg.con.d/ с произвольным именем, например 10-iglx.conf с содержанием:
    Section "ServerFlags"
        Option "IndirectGLX" "on"
    EndSection
    
  2. запускаем любое приложение использующее openGL, например glx gears, следующим образом:
    $ LIBGL_ALWAYS_INDIRECT=1 LIBGL_ALWAYS_SOFTWARE=1 glxgears 
    
    в итоге видим черный квадрат на проблемных системах.

    естественно речь не идет о системах с пропиетарным драйвером nVidia, там libGL другой и вся система по другому работает

так же на проблемных системах команда

$ xdpyinfo
в списке расширений не показывает расширение SGI-GLX, которое присутствует на тех системах где работает.

ну и glxinfo -i на проблемных системах выводит пустые строки на против OpenGL, ниже часть вывода:

$ glxinfo - i
<...>
OpenGL vendor string:
OpenGL renderer string:
OpenGL version string:
OpenGL extentions:
[тут всего 4 расширения]
<...>

Соответственно вопрос - знает ли кто как это поправить? Куда писать про проблему - в багтрекер Xorg, mesa, coentos?

 , , , ,

vyv
()

На каких вебсайтах сейчас принято делать переводы софта?

Форум — Development

Пилю i18n для LVGL. Хочу понять, какие сайты можно порекомендовать разработчикам для переводов (ну и подо что пилить скрипты импорта-экспорта).

Про Weblate в курсе, но как-то маловато опенсорсных проектов на их хостинге. Куда нонче идут в первую очередь, если хочется очередной опенцорц перевести?

 ,

Vit
()

Случилась беда с KRoN73 :(

Форум — Talks

KRoN73 RIP

Всё написанное ниже уже неактуально :(

Друзья. Под новогодние праздники (с 29 на 30) случилась ужасная беда со старейшим участником форума - KRoN73. Инсульт. Да не просто инсульт, а такой, что сейчас Рома в реанимации в Боткинской больнице в коме после трепанации. Позачера (2.01) его состояние изменилось с «нестабильно тяжёлый» на «стабильно тяжёлый», далее без динамики состояние на 04.01 - уменьшился отёк, пытается самостоятельно дышать, но пока без сознания. Разумеется, никто никаких прогнозов не даёт (если говорить прямо, даже на жизнь)

Весь ужас ситуации в том, что:

1) У него двое несовершеннолетних детей (дочь в младших классах и сын дошкольник), супруга - кандидат биологических наук (что означает доход чуть более, чем ничего) и недавно взятая ипотека ипотеку закрыли совсем недавно, cоответственно, Рома - главный кормилец в семье.

2) Рома не успел оставить доступ к своим счетам и картам получили доступ, там есть небольшая сумма.

Я никогда не делал подобные обращения, поэтому не знаю, что писать и немного (на самом деле много) растерян.

Ромина супруга Саида неохотно опубликовала в tg-группе номер своей банковской карточки Сбербанка (оттранслировано на форум Ромы) -

4276 8380 5742 5110
Саида Шамильевна Каршиева
Пожалуйста, в назначении/сообщении платежа (если есть такое поле) указывайте «на лечение» или «добровольное пожертвование на лечение»

иначе потом могут попытаться взять подоходный налог или заблокировать карту!

Если вдруг кто что-нибудь переведёт ей - буду навечно благодарен. Также могу выступить посредником между paypal (koptev@gmail.com) и супругой Ромы (разумеется, со всеми пруфами, если понадобится). Ни разу не принимал много платежей, наверное, стоит указывать в комментарии к платежу «Роману на лечение». опытные товарищи подсказывают, что ничего не надо писать в комментарии к paypal Звонил в банк, там посоветовали всё же в paypal указывать назначение платежа (например, «На лечение Романа Каршиева»), чтобы, в случае возникновения вопросов, предоставить распечатки инвойсов из интерфейса paypal.

Пожалуйста, давайте не будем в этой теме дискутировать о политике, национальности и вероисповедании.

 ,

Deleted
()

Резкий и правильный переход на linux ???

Форум — Admin

Вопрос , как нормально настроить централизованное управление клиентскими пк ? Задачи такие : 1. уйти с винды на линукс 2. сделать так чтобы не бегать 3. какое нибудь хранение файлов пользователя, его домашней папки. или просто создание снимков ОС 4. как сделать чтобы пользователь мог прыгать по пк со своей домашней папкой ? тоесть пк сломался , он пересел и продолжил работу , тонкий клиент ? а есть другие варианты ?

В общем буду благодарен за информацию для конфигураций и что надо использовать , тонкий клиент тоже имеет место быть - не знаю из чего он лепится). А там уже гугл мне поможет)

Вобще планирую выбрать ос линукс для пользователей , и загнать машины в ansible а там уже думать , пока застрял на создании плейбуков )

подскажет кто по плейбукам?) к примеру чтобы скайп установить надо :

wget https://repo.skype.com/latest/skypeforlinux-64.deb | sudo dpkg -i skypeforlinux-64.deb | sudo apt install -f

как это в плейбук првельно вписать?)

 ,

Lipuchka_RD
()

быстрый detect закрытия соединения

Форум — Development

пишу программу которая коннетится куда то. положим к 127.0.0.1:22 ожидает события через poll() (epoll тут избыточен) и читает если есть что читать.

так вот коннектится она к ssh, вычитывает приглашение от ssh и засыпает на poll(), в это время я гашу ssh, а прога детектирует закрытие канала только может через минуту. как ускорить детектирование закрытие соединения?

пробывал уже юзать

struct timeval timeout;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
rc = setsockopt(socket_handle, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));

int xtimeout = 10000;  // user timeout in milliseconds [ms]
rc = setsockopt(socket_handle, SOL_TCP, TCP_USER_TIMEOUT, (char*)&xtimeout, sizeof(xtimeout));

эффекта нет. кроме как через sysctl и настройку tcp стека можно из программы это затюнить?

 

quester
()

Есть ли здесь инди разработчики игр?

Форум — Job

Ищу работу как 2d-3d artist

 ,

Deleted
()