| Library | NuGet |
|---|---|
| LinuxDotNet.Cups | |
| LinuxDotNet.GameInput | |
| LinuxDotNet.InputEvent | |
| LinuxDotNet.SystemInfo | |
| LinuxDotNet.Video4Linux2 |
CUPS API wrapper.
foreach (var printer in CupsPrinter.GetPrinters())
{
Console.Write(printer.Name);
if (printer.IsDefault)
{
Console.Write(" (Default)");
}
Console.WriteLine();
foreach (var (name, value) in printer.Options)
{
Console.WriteLine($" {name}: {value}");
}
}var jobId = CupsPrinter.PrintFile(file, printer);using var image = SampleImage.Create();
var options = new PrintOptions
{
Printer = printer,
Copies = 1,
MediaSize = "A4",
ColorMode = true,
Orientation = PrintOrientation.Portrait,
Quality = PrintQuality.Normal
};
var jobId = CupsPrinter.PrintStream(image, options);/dev/input/js* device reader.
using var controller = new GameController();
controller.ConnectionChanged += static connected =>
{
Console.WriteLine($"Connected: {connected}");
};
controller.ButtonChanged += static (address, value) =>
{
Console.WriteLine($"Button {address} Changed: {value}");
};
controller.AxisChanged += static (address, value) =>
{
Console.WriteLine($"Axis {address} Changed: {value}");
};
controller.Start();
Console.ReadLine();
controller.Stop();using var controller = new GameController();
controller.Start();
while (true)
{
Console.SetCursorPosition(0, 0);
Console.WriteLine($"Connected: {controller.IsConnected.ToString(),-5}");
for (var i = (byte)0; i < 8; i++)
{
Console.WriteLine($"Button {i}: {controller.GetButtonPressed(i).ToString(),-5}");
}
for (var i = (byte)0; i < 8; i++)
{
Console.WriteLine($"Axis {i}: {controller.GetAxisValue(i),6}");
}
Thread.Sleep(50);
}/dev/input/event* device reader.
foreach (var device in EventDeviceInfo.GetDevices())
{
Console.WriteLine($"{device.Device,-18} {device.VendorId}:{device.ProductId} {device.Name}");
}System information api.
var uptime = PlatformProvider.GetUptime();
Console.WriteLine($"Uptime: {uptime.Uptime}");var statics = PlatformProvider.GetStatics();
Console.WriteLine($"Interrupt: {statics.Interrupt}");
Console.WriteLine($"ContextSwitch: {statics.ContextSwitch}");
Console.WriteLine($"SoftIrq: {statics.SoftIrq}");
Console.WriteLine($"ProcessRunning: {statics.ProcessRunning}");
Console.WriteLine($"ProcessBlocked: {statics.ProcessBlocked}");
Console.WriteLine($"User: {statics.CpuTotal.User}");
Console.WriteLine($"Nice: {statics.CpuTotal.Nice}");
Console.WriteLine($"System: {statics.CpuTotal.System}");
Console.WriteLine($"Idle: {statics.CpuTotal.Idle}");
Console.WriteLine($"IoWait: {statics.CpuTotal.IoWait}");
Console.WriteLine($"Irq: {statics.CpuTotal.Irq}");
Console.WriteLine($"SoftIrq: {statics.CpuTotal.SoftIrq}");
Console.WriteLine($"Steal: {statics.CpuTotal.Steal}");
Console.WriteLine($"Guest: {statics.CpuTotal.Guest}");
Console.WriteLine($"GuestNice: {statics.CpuTotal.GuestNice}");var load = PlatformProvider.GetLoadAverage();
Console.WriteLine($"Average1: {load.Average1:F2}");
Console.WriteLine($"Average5: {load.Average5:F2}");
Console.WriteLine($"Average15: {load.Average15:F2}");var memory = PlatformProvider.GetMemory();
Console.WriteLine($"Total: {memory.Total}");
Console.WriteLine($"Free: {memory.Free}");
Console.WriteLine($"Buffers: {memory.Buffers}");
Console.WriteLine($"Cached: {memory.Cached}");
Console.WriteLine($"Usage: {(int)Math.Ceiling(memory.Usage)}");var vm = PlatformProvider.GetVirtualMemory();
Console.WriteLine($"PageIn: {vm.PageIn}");
Console.WriteLine($"PageOut: {vm.PageOut}");
Console.WriteLine($"SwapIn: {vm.SwapIn}");
Console.WriteLine($"SwapOut: {vm.SwapOut}");
Console.WriteLine($"PageFault: {vm.PageFault}");
Console.WriteLine($"MajorPageFault: {vm.MajorPageFault}");
Console.WriteLine($"OutOfMemoryKiller: {vm.OutOfMemoryKiller}");var partitions = PlatformProvider.GetPartitions();
foreach (var partition in partitions)
{
var drive = new DriveInfo(partition.MountPoints[0]);
var used = drive.TotalSize - drive.TotalFreeSpace;
var available = drive.AvailableFreeSpace;
var usage = (int)Math.Ceiling((double)used / (available + used) * 100);
Console.WriteLine($"Name: {partition.Name}");
Console.WriteLine($"MountPoint: {String.Join(' ', partition.MountPoints)}");
Console.WriteLine($"TotalSize: {drive.TotalSize / 1024}");
Console.WriteLine($"UsedSize: {used / 1024}");
Console.WriteLine($"AvailableSize: {available / 1024}");
Console.WriteLine($"Usage: {usage}");
}var disk = PlatformProvider.GetDiskStatics();
foreach (var device in disk.Devices)
{
Console.WriteLine($"Name: {device.Name}");
Console.WriteLine($"ReadCompleted: {device.ReadCompleted}");
Console.WriteLine($"ReadMerged: {device.ReadMerged}");
Console.WriteLine($"ReadSectors: {device.ReadSectors}");
Console.WriteLine($"ReadTime: {device.ReadTime}");
Console.WriteLine($"WriteCompleted: {device.WriteCompleted}");
Console.WriteLine($"WriteMerged: {device.WriteMerged}");
Console.WriteLine($"WriteSectors: {device.WriteSectors}");
Console.WriteLine($"WriteTime: {device.WriteTime}");
Console.WriteLine($"IosInProgress: {device.IosInProgress}");
Console.WriteLine($"IoTime: {device.IoTime}");
Console.WriteLine($"WeightIoTime: {device.WeightIoTime}");
}var fd = PlatformProvider.GetFileDescriptor();
Console.WriteLine($"Allocated: {fd.Allocated}");
Console.WriteLine($"Used: {fd.Used}");
Console.WriteLine($"Max: {fd.Max}");var network = PlatformProvider.GetNetworkStatic();
foreach (var nif in network.Interfaces)
{
Console.WriteLine($"Interface: {nif.Interface}");
Console.WriteLine($"RxBytes: {nif.RxBytes}");
Console.WriteLine($"RxPackets: {nif.RxPackets}");
Console.WriteLine($"RxErrors: {nif.RxErrors}");
Console.WriteLine($"RxDropped: {nif.RxDropped}");
Console.WriteLine($"RxFifo: {nif.RxFifo}");
Console.WriteLine($"RxFrame: {nif.RxFrame}");
Console.WriteLine($"RxCompressed: {nif.RxCompressed}");
Console.WriteLine($"RxMulticast: {nif.RxMulticast}");
Console.WriteLine($"TxBytes: {nif.TxBytes}");
Console.WriteLine($"TxPackets: {nif.TxPackets}");
Console.WriteLine($"TxErrors: {nif.TxErrors}");
Console.WriteLine($"TxDropped: {nif.TxDropped}");
Console.WriteLine($"TxFifo: {nif.TxFifo}");
Console.WriteLine($"TxCollisions: {nif.TxCollisions}");
Console.WriteLine($"TxCarrier: {nif.TxCarrier}");
Console.WriteLine($"TxCompressed: {nif.TxCompressed}");
}var tcp = PlatformProvider.GetTcp();
var tcp6 = PlatformProvider.GetTcp6();
Console.WriteLine($"Established: {tcp.Established}");
Console.WriteLine($"SynSent: {tcp.SynSent}");
Console.WriteLine($"SynRecv: {tcp.SynRecv}");
Console.WriteLine($"FinWait1: {tcp.FinWait1}");
Console.WriteLine($"FinWait2: {tcp.FinWait2}");
Console.WriteLine($"TimeWait: {tcp.TimeWait}");
Console.WriteLine($"Close: {tcp.Close}");
Console.WriteLine($"CloseWait: {tcp.CloseWait}");
Console.WriteLine($"LastAck: {tcp.LastAck}");
Console.WriteLine($"Listen: {tcp.Listen}");
Console.WriteLine($"Closing: {tcp.Closing}");
Console.WriteLine($"Total: {tcp.Total}");var process = PlatformProvider.GetProcessSummary();
Console.WriteLine($"ProcessCount: {process.ProcessCount}");
Console.WriteLine($"ThreadCount: {process.ThreadCount}");var cpu = PlatformProvider.GetCpu();
Console.WriteLine("Frequency");
foreach (var core in cpu.Cores)
{
Console.WriteLine($"{core.Name}: {core.Frequency}");
}
if (cpu.Powers.Count > 0)
{
Console.WriteLine("Power");
foreach (var power in cpu.Powers)
{
Console.WriteLine($"{power.Name}: {power.Energy / 1000.0}");
}
}var battery = PlatformProvider.GetBattery();
if (battery.Supported)
{
Console.WriteLine($"Capacity: {battery.Capacity}");
Console.WriteLine($"Status: {battery.Status}");
Console.WriteLine($"Voltage: {battery.Voltage / 1000.0:F2}");
Console.WriteLine($"Current: {battery.Current / 1000.0:F2}");
Console.WriteLine($"Charge: {battery.Charge / 1000.0:F2}");
Console.WriteLine($"ChargeFull: {battery.ChargeFull / 1000.0:F2}");
}
else
{
Console.WriteLine("No battery found");
}var adapter = PlatformProvider.GetMainsAdapter();
if (adapter.Supported)
{
Console.WriteLine($"Online: {adapter.Online}");
}
else
{
Console.WriteLine("No adapter found");
}var monitors = PlatformProvider.GetHardwareMonitors();
foreach (var monitor in monitors)
{
Console.WriteLine($"Monitor: {monitor.Type}");
Console.WriteLine($"Name: {monitor.Name}");
foreach (var sensor in monitor.Sensors)
{
Console.WriteLine($"Sensor: {sensor.Type}");
Console.WriteLine($"Label: {sensor.Label}");
Console.WriteLine($"Value: {sensor.Value}");
}
}Video for Linux API wrapper.
foreach (var device in VideoInfo.GetAllVideo())
{
Console.WriteLine($"Device: {device.Device}");
Console.WriteLine($"Available: {device.IsAvailable}");
Console.WriteLine($"Name: {device.Name}");
Console.WriteLine($"Driver: {device.Driver}");
Console.WriteLine($"Bus: {device.BusInfo}");
Console.WriteLine($"Capabilities: 0x{device.RawCapabilities:X8}");
Console.WriteLine($" Capture: {device.IsVideoCapture}");
Console.WriteLine($" Output: {device.IsVideoOutput}");
Console.WriteLine($" Metadata: {device.IsMetadata}");
Console.WriteLine($" Streaming: {device.IsStreaming}");
Console.WriteLine($"Formats: {device.SupportedFormats.Count}");
foreach (var format in device.SupportedFormats)
{
Console.WriteLine($" Format: {format.PixelFormat}");
Console.WriteLine($" Description: {format.Description}");
var resolutions = format.SupportedResolutions.Count > 0 ? $"{String.Join(", ", format.SupportedResolutions)}" : "(Nothing)";
Console.WriteLine($" Resolution: {resolutions}");
}
}using var capture = new VideoCapture(device);
var ret = capture.Open(width, height);
if (!ret)
{
return;
}
width = capture.Width;
height = capture.Height;
// Snapshot
using var writer = new PooledBufferWriter<byte>(width * height * 2);
if (!capture.Snapshot(writer))
{
Console.WriteLine("Snapshot failed.");
return;
}
// Convert to RGBA
var buffer = new byte[width * height * 4];
ImageHelper.ConvertYUYV2RGBA(writer.WrittenSpan, buffer);
// Save
var info = new SKImageInfo(width, height, SKColorType.Rgba8888, SKAlphaType.Opaque);
using var image = SKImage.FromPixelCopy(info, buffer, width * 4);
using var data = image.Encode(SKEncodedImageFormat.Jpeg, 90);
using var stream = File.OpenWrite(output);
data.SaveTo(stream);using var capture = new VideoCapture(device);
var ret = capture.Open(width, height);
if (!ret)
{
return;
}
capture.FrameCaptured += frame =>
{
// Use frame data
};
capture.StartCapture();