LINUX.ORG.RU

Простой индикатор wifi в трей?

 


0

1

Не могу найти подходящий. Искал linux simple wifi tray indicator и linux standalone wifi tray indicator

Может посоветуете, network-manager не установлен, iwgtk требует ненужные зависимости, остальные привязаны к различным DE или менеджерам подключения.

Мне нужна только иконка, а-ля volumeicon или cbatticon, из такой категории, вообщем.

★★★★★

Я просто находил окно с набором команд iwctl и выполнял подходящую, чтобы узнать статус. То есть делегировал задачу в общий WM, а не особенное окно, называемое панелью. Распределённой системе распределённый UI =)

Поэтому от меня такой вариант, возможно неидеальный для твоей задачи: парсить выхлоп iwctl.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 4)
Ответ на: комментарий от kaldeon

чтобы узнать статус

Я просто хочу иконку в трее. Это все, что я хочу. Если бы мне нужно было распарсить выхлоп iwctl, то я бы это сделал без проблем. iwctl station wlan0 show даже парсить не надо.

dmitry237 ★★★★★
() автор топика

Conky.

А вообще, было бы хорошей идеей - запилить generic tray icon для скриптосов. Заодно всякие racket widget toolkit на них можно завязать и получить долгожданную иконку.

anonymous
()
Ответ на: комментарий от Khnazile

А что по-твоему должна показывать «иконка wifi»?

Либо сеть есть, либо ее нет. Два состояния. Это все, что нужно, абстрактно зеленая/красная. Но это должно находиться в трее в виде иконки. Это не ради мониторинга, для этого достаточно лампочек на роутере, просто, как элемент интерфейса. Например в i3bar есть i3status, в других панелях свои плюшки, conky предлагают выше, но как их запихнуть в трей, мне не ясно, да и устанавливать коньки не собираюсь. Неужели нет какой-нибудь си-крохотульки, которая что-то там считывает и отображает это в трее. Без всяких nm,iw и т.д.

dmitry237 ★★★★★
() автор топика
Ответ на: комментарий от dmitry237

fluxbox

Ну конечно. Накатываем минималистичное окружение, а потом ищем к нему всякие свистелки-перделки. Чтобы жужжало и мигало.

Сразу вменяемое DE не судьба поставить?

ALiEN175
()
Ответ на: комментарий от ALiEN175

Сразу вменяемое DE не судьба поставить?

Нет, на этом ноуте хочу минималочку. Но вот все равно как ни крути уже:

pacman -Qn | wc -l   # 676
pacman -Qm | wc -l   # 2

Есть таки грань между аскетизмом и удобством.

dmitry237 ★★★★★
() автор топика
Ответ на: комментарий от dmitry237

ну и смысл вашей «минималочки»? Как только запустите браузер, вся эта ваша минималочка улетит в трубу.

$: pacman -Qn | wc -l
794

$: pacman -Qm | wc -l
5

$: free -m
               total        used        free      shared  buff/cache   available
Mem:            5771        4396         447         443        1650        1374
Swap:           3142         928        2214

ALiEN175
()
Ответ на: комментарий от ALiEN175

ну и смысл вашей «минималочки»?

Здравого смысла в этом нет, просто решил на старый ноут поставить арч, иксы и флакс. Но что-то увлекся настройкой, вот искал эту хрень, иконку. Но что-то кушает достаточно много, без браузера под 700 мб, но тут и picom и nvidia что-то забирает и alacritty больше соточки за одно окно.

dmitry237 ★★★★★
() автор топика
Ответ на: комментарий от ALiEN175

Сразу вменяемое DE не судьба поставить?

Я бы порекомендовал WM с отдельной панелью. Флюксбокс заменить на опенбокс + тинт2 или какой-нибудь лемонбар. DE ради одного индикатора не нужны.

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

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

anonymous
()
Ответ на: комментарий от anonymous

в fvwm3 то что хочет топикстартер делается просто и элегантно


while true; do
    COLOR="gray"
    if ip addr show wifi0 | grep -qw inet; then
        COLOR="green"
    else
    fi
    FvwmCommand <<EOF
DestroyModuleConfig WifiButton: *
*WifiButton: Geometry 80x30+0+0
*WifiButton: Colorset 10
*WifiButton: (Colorset ${COLOR}, Title "WiFi0", Action (Mouse 1) Exec xterm)
KillModule FvwmButtons WifiButton
Module FvwmButtons WifiButton
EOF
    sleep 60
done

но топикстартер решил использовать fluxbox и плодить темы на лоре

gagarin0
()
Ответ на: комментарий от gagarin0

в fvwm3 то что хочет топикстартер делается просто и элегантно

Вопрос не в этом, в i3 делается еще проще. Жаль, что нет ничего подходящего. Но и без этого нормально.

но топикстартер решил использовать fluxbox

Ну да, пусть остается. Отличный вм.

dmitry237 ★★★★★
() автор топика
Ответ на: комментарий от dmitry237

Вопрос не в этом

Ну да, пусть остается. Отличный вм.

что мешает заменить отличный fluxbox в котором нет нужного вам функционала, на еще более отличный fvmw3 который по ресурсам жрет меньше чем fluxbox?

и в котором ваши хотели делаются за 3 минуты, вместо того чтобы сидеть в интернете и создавать новые топики?

gagarin0
()
Ответ на: комментарий от gagarin0

на еще более отличный fvmw3

Совсем не хочется.

который по ресурсам жрет меньше чем fluxbox?

Да что там ресурсы, 17мб сам fluxbox против 120 только одного окна alacritty, 135 picom, 800 firefox с одной вкладкой, ну вот и выходит:

$ free --mega
               total        used        free      shared  buff/cache   available
Mem:            8199        1877        4417          71        2262        6321
Swap:           4294           0        4294

$ zramctl
NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 zstd            4G   4K   40B   12K       8 [SWAP]
 187

Я же его поставил не из соображений экономии памяти. Просто нравится, ностальгия по временам, когда только осваивал линукс, лет 20 назад, слака и ее дети зенволк и еще какой-то, вроде вектор.

dmitry237 ★★★★★
() автор топика

Что там у тебя в fluxbox можно в статус бар добавить?

Вот, к примеру, у меня в mate на панель можно добавить «command» – по-сути скрипт выполняется и то что он в stdout выбрасывает отображается на панели. У меня так выводится «vpn: ON» / «vpn OFF»

futurama ★★★★★
()
Ответ на: комментарий от futurama

Что там у тебя

Такой штатной возможности нет. Ни вывод скрипта ни чтение из файла в панели флаксбокса не предусмотрены. Если бы это было возможно, я бы не искал а написал скрипт. Можно конечно заменить панель на стороннюю. Но пусть остается как есть, этим ноутбуком пользуюсь не каждый день и достаю только обновить.

dmitry237 ★★★★★
() автор топика
Ответ на: комментарий от dmitry237

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

Так а почему самому не написать? На питоне пишется за часик(ну может за 2) легко. Кстати, можно наверное озадачить дикпик какой или гопоту, чтобы тебе написали.

Мн бы если было не лень, мог бы на кутях написать. Там строчек 10-20 кода нужно. Но ты же потом скажешь, что тебе собирать не хочется из моего кода.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Дипсик сделал то что тебе нужно за 30 секунд. Пользуйся. NetworkManager заменить на свой вариант, думаю уж справишься. Ну или сам сходи к ИИ на поклон и выбери на чем тебе писать и какими технологиями пользоваться.

#include <QApplication>
#include <QSystemTrayIcon>
#include <QTimer>
#include <QDebug>
#include <QDBusConnection>
#include <QDBusInterface>
#include <QDBusReply>

class WifiTrayIcon : public QSystemTrayIcon {
    Q_OBJECT
public:
    WifiTrayIcon(QObject *parent = nullptr) : QSystemTrayIcon(parent) {
        // Настройка иконок
        connectedIcon = QIcon::fromTheme("network-wireless-connected");
        disconnectedIcon = QIcon::fromTheme("network-wireless-disconnected");
        
        // Настройка D-Bus соединения
        nmInterface = new QDBusInterface(
            "org.freedesktop.NetworkManager",
            "/org/freedesktop/NetworkManager",
            "org.freedesktop.NetworkManager",
            QDBusConnection::systemBus(),
            this
        );

        // Таймер для обновления статуса
        timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &WifiTrayIcon::updateStatus);
        timer->start(2000); // Обновление каждые 2 секунды

        // Первоначальное обновление
        updateStatus();
    }

private slots:
    void updateStatus() {
        bool wifiEnabled = checkWifiState();
        setIcon(wifiEnabled ? connectedIcon : disconnectedIcon);
        setToolTip(wifiEnabled ? "Wi-Fi Connected" : "Wi-Fi Disconnected");
    }

private:
    bool checkWifiState() {
        if (!nmInterface->isValid()) {
            qWarning() << "DBus interface not valid!";
            return false;
        }

        // Проверяем состояние беспроводных устройств
        QDBusReply<QList<QDBusObjectPath>> devicesReply = nmInterface->call("GetDevices");
        if (!devicesReply.isValid()) return false;

        foreach (QDBusObjectPath path, devicesReply.value()) {
            QDBusInterface deviceInterface(
                "org.freedesktop.NetworkManager",
                path.path(),
                "org.freedesktop.NetworkManager.Device",
                QDBusConnection::systemBus()
            );
            
            if (deviceInterface.property("DeviceType").toUInt() == 2) { // 2 = WiFi
                QDBusInterface wirelessInterface(
                    "org.freedesktop.NetworkManager",
                    path.path(),
                    "org.freedesktop.NetworkManager.Device.Wireless",
                    QDBusConnection::systemBus()
                );
                
                return wirelessInterface.property("ActiveAccessPoint").isValid();
            }
        }
        return false;
    }

    QIcon connectedIcon;
    QIcon disconnectedIcon;
    QDBusInterface *nmInterface;
    QTimer *timer;
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    if (!QSystemTrayIcon::isSystemTrayAvailable()) {
        qCritical() << "System tray not available!";
        return 1;
    }

    WifiTrayIcon trayIcon;
    trayIcon.show();

    return app.exec();
}

#include "main.moc"
Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 4)