239 lines
7.8 KiB
Markdown
239 lines
7.8 KiB
Markdown
# OpenMaui Linux Platform
|
|
|
|
A comprehensive Linux platform implementation for .NET MAUI using SkiaSharp rendering.
|
|
|
|
[](https://www.nuget.org/packages/OpenMaui.Controls.Linux)
|
|
[](LICENSE)
|
|
|
|
**Developed by [MarketAlly LLC](https://marketally.com)**
|
|
**Lead Architect: David H. Friedel Jr.**
|
|
|
|
## Overview
|
|
|
|
This project brings .NET MAUI to Linux desktops with native X11/Wayland support, hardware-accelerated Skia rendering, and full platform service integration.
|
|
|
|
### Key Features
|
|
|
|
- **Full Control Library**: 35+ controls including Button, Label, Entry, CarouselView, RefreshView, SwipeView, and more
|
|
- **Native Integration**: X11 and Wayland display server support
|
|
- **Accessibility**: AT-SPI2 screen reader support and high contrast mode
|
|
- **Platform Services**: Clipboard, file picker, notifications, global hotkeys, drag & drop
|
|
- **Input Methods**: IBus and XIM support for international text input
|
|
- **High DPI**: Automatic scale factor detection for GNOME, KDE, and X11
|
|
|
|
## Quick Start
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Install the templates
|
|
dotnet new install OpenMaui.Linux.Templates
|
|
|
|
# Create a new project (choose one):
|
|
dotnet new openmaui-linux -n MyApp # Code-based UI
|
|
dotnet new openmaui-linux-xaml -n MyApp # XAML-based UI (recommended)
|
|
|
|
cd MyApp
|
|
dotnet run
|
|
```
|
|
|
|
### Manual Installation
|
|
|
|
```bash
|
|
dotnet add package OpenMaui.Controls.Linux --prerelease
|
|
```
|
|
|
|
## XAML Support
|
|
|
|
OpenMaui fully supports standard .NET MAUI XAML syntax. Use the familiar XAML workflow:
|
|
|
|
```xml
|
|
<!-- MainPage.xaml -->
|
|
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
|
x:Class="MyApp.MainPage">
|
|
<VerticalStackLayout>
|
|
<Label Text="Hello, OpenMaui!" FontSize="32" />
|
|
<Button Text="Click me" Clicked="OnButtonClicked" />
|
|
<Entry Placeholder="Enter text..." />
|
|
<Slider Minimum="0" Maximum="100" />
|
|
</VerticalStackLayout>
|
|
</ContentPage>
|
|
```
|
|
|
|
```csharp
|
|
// MauiProgram.cs
|
|
var builder = MauiApp.CreateBuilder();
|
|
builder
|
|
.UseMauiApp<App>()
|
|
.UseOpenMauiLinux(); // Enable Linux with XAML support
|
|
```
|
|
|
|
## Supported Controls
|
|
|
|
| Category | Controls |
|
|
|----------|----------|
|
|
| **Basic** | Button, Label, Entry, Editor, CheckBox, Switch, RadioButton |
|
|
| **Layout** | StackLayout, ScrollView, Border, Page |
|
|
| **Selection** | Picker, DatePicker, TimePicker, Slider, Stepper |
|
|
| **Display** | Image, ImageButton, ActivityIndicator, ProgressBar |
|
|
| **Collection** | CollectionView, CarouselView, IndicatorView |
|
|
| **Gesture** | SwipeView, RefreshView |
|
|
| **Navigation** | NavigationPage, TabbedPage, FlyoutPage, Shell |
|
|
| **Menu** | MenuBar, MenuFlyout, MenuItem |
|
|
| **Graphics** | GraphicsView, Border |
|
|
|
|
## Platform Services
|
|
|
|
| Service | Description |
|
|
|---------|-------------|
|
|
| `ClipboardService` | System clipboard access |
|
|
| `FilePickerService` | Native file open dialogs |
|
|
| `FolderPickerService` | Folder selection dialogs |
|
|
| `NotificationService` | Desktop notifications (libnotify) |
|
|
| `GlobalHotkeyService` | System-wide keyboard shortcuts |
|
|
| `DragDropService` | XDND drag and drop protocol |
|
|
| `LauncherService` | Open URLs and files |
|
|
| `ShareService` | Share content with other apps |
|
|
| `SecureStorageService` | Encrypted credential storage |
|
|
| `PreferencesService` | Application settings |
|
|
| `BrowserService` | Open URLs in default browser |
|
|
| `EmailService` | Compose emails |
|
|
| `SystemTrayService` | System tray icons |
|
|
|
|
## Accessibility
|
|
|
|
- **AT-SPI2**: Screen reader support for ORCA and other assistive technologies
|
|
- **High Contrast**: Automatic detection and color palette support
|
|
- **Keyboard Navigation**: Full keyboard accessibility
|
|
|
|
## Requirements
|
|
|
|
- .NET 9.0 SDK or later
|
|
- Linux (kernel 5.4+)
|
|
- X11 or Wayland
|
|
- SkiaSharp native libraries
|
|
|
|
### System Dependencies
|
|
|
|
**Ubuntu/Debian:**
|
|
```bash
|
|
sudo apt-get install libx11-dev libxrandr-dev libxcursor-dev libxi-dev libgl1-mesa-dev libfontconfig1-dev
|
|
```
|
|
|
|
**Fedora:**
|
|
```bash
|
|
sudo dnf install libX11-devel libXrandr-devel libXcursor-devel libXi-devel mesa-libGL-devel fontconfig-devel
|
|
```
|
|
|
|
## Documentation
|
|
|
|
- [Getting Started Guide](docs/GETTING_STARTED.md)
|
|
- [FAQ - Visual Studio Integration](docs/FAQ.md)
|
|
- [API Reference](docs/API.md)
|
|
- [Contributing Guide](CONTRIBUTING.md)
|
|
|
|
## Sample Applications
|
|
|
|
Full sample applications are available in the [maui-linux-samples](https://git.marketally.com/open-maui/maui-linux-samples) repository:
|
|
|
|
| Sample | Description |
|
|
|--------|-------------|
|
|
| **[TodoApp](https://git.marketally.com/open-maui/maui-linux-samples/src/branch/main/TodoApp)** | Task manager with NavigationPage, XAML data binding, CollectionView |
|
|
| **[ShellDemo](https://git.marketally.com/open-maui/maui-linux-samples/src/branch/main/ShellDemo)** | Control showcase with Shell navigation and flyout menu |
|
|
|
|
## Quick Example
|
|
|
|
```csharp
|
|
using OpenMaui.Platform.Linux;
|
|
|
|
var app = new LinuxApplication();
|
|
|
|
app.MainPage = new ContentPage
|
|
{
|
|
Content = new VerticalStackLayout
|
|
{
|
|
Spacing = 10,
|
|
Children =
|
|
{
|
|
new Label
|
|
{
|
|
Text = "Welcome to MAUI on Linux!",
|
|
FontSize = 24
|
|
},
|
|
new Button
|
|
{
|
|
Text = "Click Me"
|
|
},
|
|
new Entry
|
|
{
|
|
Placeholder = "Enter your name"
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
app.Run();
|
|
```
|
|
|
|
## Building from Source
|
|
|
|
```bash
|
|
git clone https://git.marketally.com/open-maui/maui-linux.git
|
|
cd maui-linux
|
|
dotnet build
|
|
dotnet test
|
|
```
|
|
|
|
## Contributing
|
|
|
|
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ .NET MAUI │
|
|
│ (Virtual Views) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ Handlers │
|
|
│ (Platform Abstraction) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ Skia Views │
|
|
│ (SkiaButton, SkiaLabel, etc.) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ SkiaSharp Rendering │
|
|
│ (Hardware Accelerated) │
|
|
├─────────────────────────────────────────────────┤
|
|
│ X11 / Wayland │
|
|
│ (Display Server) │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Roadmap
|
|
|
|
- [x] Core control library (35+ controls)
|
|
- [x] Platform services integration
|
|
- [x] Accessibility (AT-SPI2)
|
|
- [x] Input method support (IBus/XIM)
|
|
- [x] High DPI support
|
|
- [x] Drag and drop
|
|
- [x] Global hotkeys
|
|
- [ ] Complete Wayland support
|
|
- [ ] Hardware video acceleration
|
|
- [ ] GTK4 interop layer
|
|
|
|
## License
|
|
|
|
Copyright (c) 2025 MarketAlly LLC. Licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
## Acknowledgments
|
|
|
|
- [MarketAlly LLC](https://marketally.com) - Project development and maintenance
|
|
- [SkiaSharp](https://github.com/mono/SkiaSharp) - 2D graphics library
|
|
- [.NET MAUI](https://github.com/dotnet/maui) - Cross-platform UI framework
|
|
- The .NET community
|
|
|
|
|
|
|