패키지, 저장소 및 앱 카테고리 검색

패키지 상세v0.8.0

dbus

D-Bus 메시지 버스 클라이언트의 네이티브 Dart 구현입니다. 이 패키지는 Dart 애플리케이션이 Linux 데스크톱 서비스에 직접 액세스할 수 있도록 합니다.

WindowsLinux
30일 다운로드
854만
좋아요
80
Pub 점수
160

패키지 설치

flutter pub add dbus

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

D-Bus 메시지 버스 클라이언트의 네이티브 Dart 구현으로, Dart 애플리케이션이 Linux 데스크톱 서비스와 직접 통신할 수 있게 해줍니다. 이 패키지는 시스템 및 애플리케이션 서비스(세션 관리, 하드웨어 이벤트, 데스크톱 통합 등)와 상호작용할 수 있도록 D-Bus에 대한 저수준 접근을 제공합니다. Linux에서 데스크톱 애플리케이션을 개발하는 개발자를 위한 것으로, 호환 가능한 D-Bus 구현을 통해 Windows 및 macOS도 지원합니다. 이 라이브러리는 D-Bus를 통해 메시지를 보내고 받기 위한 깔끔하고 Dart 네이티브 API를 제공합니다.

사용 사례

  • Linux 시스템 서비스와 상호 작용하기
  • Dart 앱에서 데스크톱 기능 통합하기
  • 하드웨어 및 세션 이벤트에 액세스
  • 크로스 플랫폼 데스크톱 유틸리티 구축
  • 다른 데스크톱 애플리케이션과의 통신 활성화

주요 기능

  • 네이티브 Dart D-Bus 클라이언트
  • Linux 데스크톱 서비스에 직접 액세스
  • 메시지 버스(세션 및 시스템) 지원
  • 크로스 플랫폼 호환성 (Linux, Windows, macOS)
  • 클린한 비동기 Dart API

적합한 대상

  • Linux를 대상으로 하는 데스크톱 앱 개발자
  • 시스템 레벨 통합
  • 데스크톱 도구를 개발하는 Dart 개발자
  • 데스크톱 서비스 통신이 필요한 애플리케이션
  • 저수준 리눅스 통합이 필요한 프로젝트

고려 사항

  • 주로 리눅스 환경을 위한 것
  • 기본 사용법 외에 문서가 제한적
  • 대상 시스템에서 D-Bus 데몬 사용 가능성이 필요합니다
  • Windows/macOS에서 플랫폼별 구성이 필요할 수 있습니다
  • 모바일 또는 웹 플랫폼에는 적합하지 않습니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Pub Package codecov

A native Dart client implementation of D-Bus.

Accessing remote objects

The easiest way to get started is to generate Dart classes from a D-Bus interface definition, for example:

<node name="/com/example/Test/Object">
  <interface name="com.example.Test">
    <property name="Version" type="s" access="read"/>
    <method name="ReverseText">
      <arg name="input" type="s" direction="in"/>
      <arg name="output" type="s" direction="out"/>
    </method>
  </interface>
</node>

The dart-dbus tool processes this interface to generate a Dart source file:

$ dart-dbus generate-remote-object test-object.xml -o test-remote-object.dart

You can then use the generated test-remote-object.dart to access that remote object from your program:

import 'package:dbus/dbus.dart';
import 'test-remote-object.dart';

Future<void> main() async {
  var client = DBusClient.session();
  var object = ComExampleTestObject(client, 'com.example.Test');
  var version = await object.getVersion();
  print('version: $version');
  var reversedText = await object.callReverseText('Hello World');
  print(reversedText);
  await client.close();
}

The code generated by dart-dbus may not be the cleanest API you want to expose for your service. It is recommended that you use the generated code as a starting point and then modify it as necessary.

Exporting local objects

The above interface definition can also be processed to generate a class for exporting this object.

$ dart-dbus generate-object test-object.xml -o test-object.dart

You can then use the generated test-object.dart in your program:

import 'package:dbus/dbus.dart';
import 'test-object.dart';

class TestObject extends ComExampleTestObject {
  @override
  Future<DBusMethodResponse> getVersion() async {
    return DBusGetPropertyResponse(DBusString('1.2'));
  }

  @override
  Future<DBusMethodResponse> doReverseText(String input) async {
    var reversedText = String.fromCharCodes(input.codeUnits.reversed);
    return DBusMethodSuccessResponse([DBusString(reversedText)]);
  }
}

Future<void> main() async {
  var client = DBusClient.session();
  await client.requestName('com.example.Test');
  await client.registerObject(TestObject());
}

Using objects without dbus-dart

You can also choose to access D-Bus objects directly without interface definitions and dbus-dart. This requires writing more code and handing more error cases.

The following code shows how to access the remote object in the above examples:

import 'package:dbus/dbus.dart';

Future<void> main() async {
  var client = DBusClient.session();
  var object = DBusRemoteObject(client, name: 'com.example.Test', path: DBusObjectPath('/com/example/Test/Object'));
  var value = await object.getProperty('com.example.Test', 'Version', signature: DBusSignature('s'));
  var version = value.asString();
  print('version: $version');
  var response = await object.callMethod('com.example.Test', 'ReverseText', [DBusString('Hello World')], replySignature: DBusSignature('s'));
  var reversedText = response.values[0].asString();
  print('$reversedText');
  await client.close();
}

And the following shows how to export that object:

import 'package:dbus/dbus.dart';

class TestObject extends DBusObject {
  TestObject() : super(DBusObjectPath('/com/example/Test/Object'));

  @override
  Future<DBusMethodResponse> getProperty(String interface, String name) async {
    if (interface == 'com.example.Test' && name == 'Version') {
      return DBusGetPropertyResponse(DBusString('1.2'));
    } else {
      return DBusMethodErrorResponse.unknownProperty();
    }
  }

  @override
  Future<DBusMethodResponse> handleMethodCall(DBusMethodCall methodCall) async {
    if (methodCall.interface == 'com.example.Test') {
      if (methodCall.name == 'ReverseText') {
        if (methodCall.signature != DBusSignature('s')) {
          return DBusMethodErrorResponse.invalidArgs();
        }
	var input = methodCall.values[0].asString();
        var reversedText = String.fromCharCodes(input.codeUnits.reversed);
        return DBusMethodSuccessResponse([DBusString(reversedText)]);
      } else {
        return DBusMethodErrorResponse.unknownMethod();
      }
    } else {
      return DBusMethodErrorResponse.unknownInterface();
    }
  }
}

Future<void> main() async {
  var client = DBusClient.session();
  await client.requestName('com.example.Test');
  await client.registerObject(TestObject());
}

Contributing to dbus.dart

We welcome contributions! See the contribution guide for more details.

카테고리

의존성

의존성 목록 4 개

소스 저장소

이 패키지를 사용하는 프로젝트